设有以下宏定义,当int x,m=5,n=1;时,执行语句IFABC(m+n,m,x);后,x的值为?

#define IFABC(a,b,c) c=a>b?a:b
书上答案是m+n=6,难道不应该是m+m=10吗?

展开后是x=m+n>m?m+n:m
运算规则从左到右,运算符优化级 +号大于>
所以先算实际运算是:x=(m+n)>m?(m+n):m这种效果

m+n=5+1=6
所以IFABC(6,5,0) 代进去,6>5?,满足则返回6,将c=6.所以x=6.


展开后是,x=m+n>m?m+n:m 三目运算符 m+n>m吗?大于就m+n,小于就m。显然大于,所以是m+n=5+1=6.

宏定义是简单的字符串替换,宏定义中不会进行运算,替换完后还是要按照运算符的优先级计算
IFABC(m+n,m,x)就是x = m+n>m?m+n:m;
这里三目的救国显然是m+n即6