gpt4 book ai didi

c - 为什么 'max'宏在C中是这样定义的?

转载 作者:太空狗 更新时间:2023-10-29 16:57:46 25 4
gpt4 key购买 nike

 #define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; })

为什么不简单地 (a>b ? a : b)

最佳答案

因为否则 max(f(1), f(2)) 会调用两个函数之一:

f(1) > f(2) ? f(1) : f(2)

而不是通过“缓存”_a_b 中的两个值

({
sometype _a = (a);
sometype _b = (b);

_a > _b ? _a : _b;
})

(正如其他人所指出的那样,自动递增/自动递减也存在同样的问题)

我认为 Visual Studio 不支持这种方式。这是一个复合语句。在这里阅读 does msvc have analog of gcc's ({ })

我将在此处给出的 gcc 手册中添加复合语句的定义 http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html#SEC62显示与 max 问题之一非常相似的代码 :-)

关于c - 为什么 'max'宏在C中是这样定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5323733/

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