gpt4 book ai didi

c - #define Square(x) (x*(x))

转载 作者:行者123 更新时间:2023-12-04 12:05:11 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com