gpt4 book ai didi

c - 操作中的宏结果故障

转载 作者:行者123 更新时间:2023-11-30 19:57:57 24 4
gpt4 key购买 nike

我尝试使用这个宏:

#define min(x,y) x<y? x:y

它应该返回最小值,而且确实返回了。唯一的问题是当尝试在操作中使用该宏的结果时,它不起作用。

示例

x=min(3,4);

这里 x 自然会有 3 作为值,但是当尝试这样做时:

x= 23 + min(3,4);

无论我向其中添加什么数字(其中 23 是任意的),结果仍将始终为 3(宏的结果)。我可以知道为什么会发生这种情况吗?

最佳答案

问题在于运算符结合性和优先级。当您展开宏时,它会变成:

x = 23 + 3 < 4 ? 3 : 4;

解释为:

x = (23 + 3) < 4 ? 3 : 4;

因为算术运算符的优先级高于比较运算符。您应该将扩展括在括号中以强制将其视为单个表达式。

#define min(x,y) (x<y? x:y)

您还应该在每个参数的使用处加上括号,以防它们是带有优先级低于 < 的运算符的表达式。 .

#define min(x,y) ( (x) < (y) ? (x) : (y) )

DEMO

但是对这样的函数使用宏仍然是一个坏主意。参数的所有重复意味着您不能将其与有副作用的表达式一起使用。例如。 min(i++, j++)会将其中一个变量增加两次。最好使用内联函数。

关于c - 操作中的宏结果故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34821511/

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