【发布时间】:2013-06-09 06:31:07
【问题描述】:
我有以下简单的 C 代码
#define Sqrt(A) A * A
int main(void) {
int A = 10;
int x = Sqrt(A+1);
return 0;
}
由于某种原因,当我这样使用它时,使用 A+1,我得到 x 为 21,这可能是 10+11。 我的问题是,乘法是如何被忽略的? 如果我用宏文本切换宏,我会得到正确的结果,即 121。
谢谢。
【问题讨论】:
-
始终在宏变量周围加上括号。请记住,它们在编译之前被扩展,因此任何可能导致奇怪的操作顺序的扩展都可能发生。括号停止。
-
正是这种行为让一些人讨厌宏。如果你能找到宏的替代方法(比如定义一个函数),你应该认真考虑一下(如果你还没有的话)。