【发布时间】:2016-04-21 14:22:35
【问题描述】:
所以我在 C 程序中的宏调用中遇到了这个相当“顽固”的问题。 我使用的宏是:
#define MACRO(X) X*X
问题是当我这样做时
printf("%d",MACRO(3));
它显示 9 作为结果(这是正确的)。仅当我将 3 作为 2+1 传递如下:
printf("%d",MACRO(2+1));
奇怪地显示结果为 5。 谁能告诉我为什么?
【问题讨论】:
-
MACRO(2+1)扩展为2+1*2+1,你需要( ) -
2+1*2+1 = 2 + (1 * 2) + 1 = 5
-
@BLUEPIXY - 你的 cmets 非常值得回答..
-
看起来像是 The need for parentheses in macros in C 的骗子,它使用了宏
#define SQR(x) (x*x),我已经 VTC 打错了,但这将是一个更好的骗子目标。 -
请记住宏会直接替换文本。要获得正确的操作,请将宏主体中的每个“x”元素用括号括起来,就像在调用宏的位置编写宏主体一样。