急!c语言遇到一有关带参宏定义问题

2024-12-19 17:46:58
推荐回答(4个)
回答1:

#define 宏定义 只是简单的替换 ,如果 #define f(x) x*x, 编译的时候 , f(3+3) = 3+3*3+3
所以应该这样宏定义 #define f(x) (x)*(x) ,这样就好了,不会产生歧义。
这也是C语言宏定义的缺陷,容易产生二义性,所以c++提出了其替代功能,也就是内联函数。

回答2:

#define f(x) ((x)*(x)) //多带几个括号就没事了

少了括号,它一展开就不是你想要的啦
f(3+3)/f(2+2) 没括号时展开是 3+3*3+3/2+2*2+2 结果就是19了
明白么?

回答3:

i=f(3+3)/f(2+2);
这一句带入宏后定义后变成:
i=3+3*3+3/2+2*2+2;
这样是不是很清楚呢?

回答4:

宏定义与展开的问题。 一楼正解。