#include <stdio.h>
#define big(a, b) a > b ? a : b
#define swap(a, b) temp = a; a = b; b = temp;
int main() {
int a = 3, b = 5, temp = 0;
if ((3 + big(a, b)) > b)
swap(a, b);
printf("%d %d", a, b);
}
以上代码是在多项选择题中给出的。 我预计答案是 5 3。运行代码时,输出结果是 5 0。我试图理解这一点,但我的努力是徒劳的。这段代码的作用是什么?
只需展开代码中的宏即可得到
int main() {
int a = 3, b = 5, temp = 0;
if ((3 + a > b ? a : b ) > b)
temp = a;
a = b;
b = temp;
printf("%d %d", a, b);
}
由于条件运算符中的第一个表达式等于 6,因此条件运算符的结果是 a 小于 b 的值。
因此 if 语句的条件 eva 逻辑 false 并且该语句
temp = a;
被跳过。
结果 a 将等于 5,b 将等于 0。
您需要使用括号。例如
#define big(a, b) ( ( a ) > ( b ) ? ( a ) : ( b ) )
#define swap(a, b) do { temp = ( a ); ( a ) = ( b ); ( b ) = temp; } while ( 1 )