c语言宏定义计算, #define f(x) x*x main() ( int i i=f

c语言宏定义计算,
#define f(x) x*x

main()
(
int i
i=f(4+4)/f(2+2)
)
结果i怎么是3

这代码都是错的, 怎么可能会输出i是3.

宏函数和函数最根本的区别就是, 宏函数真的是你传的啥, 它就变成啥, 就按你传的数据来说:
f(x)
第一个f的x就是4 + 4, 那么在宏函数里x就会被替换, 注意是替换, 成4+4, 即:
f(4 + 4) 等同于 4+4 * 4+4
而f(2+2)是同理, 它等同于2+2*2+2

宏它是一种纯文本的改变, 可以说预处理器它就是一个自动的文本编辑器, 把一些特定的单词, 换成另一些字符.
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-11-18
i=f(4+4)/f(2+2)=4+4*4+4/2+2*2+2=28
如果#define f(x) (x*x)
i=f(4+4)/f(2+2)=(4+4)*(4+4)/(2+2)*(2+2)=64

#define f(x) x*x
i=(f(4+4))/(f(2+2));
这样i=f(4+4)/f(2+2)=(4+4*4+4)/(2+2*2+2)=24/8=3

你想到达到你的效果要这样写
#define f(x) ((x)*(x))
i=(f(4+4))/(f(2+2));
这样i= ((4+4)*(4+4))/((2+2)*(2+2))=4
多加点括号就好
第2个回答  2015-03-19
这里要注意,宏替换与函数参数传递有区别。
i =( 4+4*4+4)/(2+2*2+2)=24/8=3本回答被提问者采纳
相似回答