这个问题在这里已经有了答案:
8年前关闭。
Possible Duplicate:
square of a number being defined using #define
你能解释一下为什么下面的代码输出“29”吗?
#define Square(x) (x*(x))
void main()
{
int x = 5;
printf("%d", Square(x+3));
}
最佳答案
由于宏只进行文本替换,你最终会得到:
x + 3 * (x + 3)
这是 29。
您绝对应该始终将宏参数放在括号之间。
#define Square(x) ((x)*(x))
更好的是,使用一个函数并信任编译器来内联它。
编辑
正如 leemes 所指出的,宏计算
x
的事实两次可能是一个问题。使用函数或更复杂的机制(例如 gcc 语句表达式)可以解决此问题。这是一个笨拙的尝试:#define Square(x) ({ \
typeof(x) y = (x); \
y*y; \
})
关于c - #define Square(x) (x*(x)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14662815/