C中的决策 - ?:运算符示例

Hap*_*ppy 3 c ternary-operator c-preprocessor

我知道运算符是如何工作的,但我不明白下面代码中的第二种情况如何给出1作为结果.

#define MIN(a,b) a<b ? a:b  
int x = MIN(1,2);  //case 1, output is 1
int x = MIN(1,1+1); // case 2
Run Code Online (Sandbox Code Playgroud)

编译器不应该看到这个(情况2)为"是1 <1 + 1?",我认为应该是"1 <1?不是",表达式3被执行并得到:"b"= 1 +1 = 2.这是因为上面的宏中a和b周围没有括号,或者可能是因为我遵循自己的规则而感到迷茫?请帮忙....

另外,你如何解释这个案例:

int x = MIN(1,2) + 1;  //should we consider the "1" on the right?
Run Code Online (Sandbox Code Playgroud)

眠りネ*_*ネロク 8

你的第二个案子

 MIN(1,1+1); 
Run Code Online (Sandbox Code Playgroud)

扩展到

 1<1+1 ? 1:1+1;
Run Code Online (Sandbox Code Playgroud)

由于1<1+1被评估为真,因此上述表达式导致1.


该声明

int x = MIN(1,2) + 1; 
Run Code Online (Sandbox Code Playgroud)

扩张后的结果

int x = 1<2 ? 1:2 + 1;
Run Code Online (Sandbox Code Playgroud)

运算符的+优先级高于三元运算符 :?,因此下面的表达式实际上相当于

1<2 ? 1:(2 + 1);
Run Code Online (Sandbox Code Playgroud)