gpt4 book ai didi

c - 在 C 中为 2 个数字的最小值定义宏

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

#define MIN (A,B) ((A)<(B)?(A):(B))#define MIN (A,B) ((A < B)? A : B )

请选择一个答案,为什么?!

最佳答案

让我们有这个表达式:

int c = MIN(x == y, 1);

让我们试试 #define MIN (A,B) ((A < B) ? A : B )

在 C 中 ==运算符的优先级低于 < (所以 x == y < z 相当于 x == (y < z) ),所以它会变成

int c = MIN (x == (y < 1) ? x == y : 1)

如果你使用第二种表达方式...这是错误的,所以最好使用第一种形式。

让我们试试 #define MIN (A,B) ((A) < (B) ? (A) : (B))只是为了确定...

这里我们有

int c = MIN ((x == y) < (1) ? (x == y) : (1))

好多了!

最终他们都是“坏”的,因为

int c = MIN(++x, 1);

将有++x评估两次(一次在 < 比较中,一次在三元运算符“选择”作为结果时)

int c = MIN ((++x) < (1) ? (++x) : (1))

关于c - 在 C 中为 2 个数字的最小值定义宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18017907/

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