#define M 2<3 ? 5:6 void main( ) { int i=3, j, k; j=i+M; k=i+(M); printf ("%d, %d\n", j, k); }
为什么j=6,k=8,(M)有什么特殊含义吗
(M)保证了三目运算符的优先级
如果没有括号,比如j=i+M的表达式展开是这样的:
j=i+2<3?5:6,根据运算符优先级,相当于 j=(i+2)<3?5:6了。
会先运算i+2,等于5,5<3不成立,所以 j=6,而如果是k=i+(M),则先计算三目运算,2<3成立,结果为5,k=3+5=8
#define M 2<3 ? 5:6运行过程是先替换后执行,所以两处调用分别可以变成
j=i+2<3 ? 5:6; //j=6
k=i+(2<3 ? 5:6);//k=8