【发布时间】:2017-12-06 01:35:18
【问题描述】:
#include <stdio.h>
#define max(x,y)(x)>(y)?x:y
int main() {
int i = 10;
int j = 5;
int k = 0;
k == max(i++, ++j);
printf("%d%d%d ", i, j, k);
return 0;
}
我知道答案。它是11 7 0,但如何?请帮我执行三元运算符。
【问题讨论】:
-
使用带有副作用表达式的宏是一个坏的想法。不要永远编写这样的代码。注意:这与三元运算符无关。
-
MSVC 的
stdlib.h已经有max宏 - 也许 gcc 也有。 -
你确定 k == max(I++,++j) 吗? '==' 将检查 'k' > 0.
-
@IharobAlAsimi;那肯定不是 UB。
-
@Jean-FrançoisFabre:使用副作用参数很好。问题是如果副作用参数没有被精确评估一次。
标签: c macros operator-keyword ternary