This question already has an answer here:
Closed last year.
C macro with expression unwanted result
(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))

10-04 21:54
查看更多