This question already has an answer here:
Closed last year.
C macro with expression unwanted result
(1个答案)
是的,所以我试着去理解C预处理器,伙计,这是一个急事。
我有一个简单的
我需要找出
有人能给我解释一下吗?我有点笨,所以尽可能全面些就好了。
变成这样:
While计算为:
也就是17岁。
您应该始终将宏参数括起来,以防止出现以下问题:
然后,上述调用将扩展到:
(1个答案)
是的,所以我试着去理解C预处理器,伙计,这是一个急事。
我有一个简单的
#define Square(x)(x*x)
我需要找出
Square(5+2)
在调用时返回的内容。作为这一领域的新手,我立刻认为它会显示49
,但你瞧,它回来了17
。有好几分钟,我试着弄清楚怎么会这样。有人能给我解释一下吗?我有点笨,所以尽可能全面些就好了。
最佳答案
C语言中的预处理器宏直接进行符号替换。所以这个:
Square(5+2)
变成这样:
(5+2*5+2)
While计算为:
(5+(2*5)+2)
也就是17岁。
您应该始终将宏参数括起来,以防止出现以下问题:
#define Square(x) ((x)*(x))
然后,上述调用将扩展到:
((5+2)*(5+2))