有个关于预处理命令的题目不知道怎么解啊?

来源:百度知道 编辑:UC知道 时间:2024/05/26 00:53:52
#define MAX(x,y) (x)>(y)?(x):(y)
main()
{int a=5,b=2,c=3,d=3,t;
t=MAX(a+b,c+d)*10;
printf("%d\n",t);
}
答案等于7,可是t=MAX(a+b,c+d)*10它乘以10怎么还是等于7呢,我算的等于70啊??

t = MAX(a+b, c+d) * 10

将宏展开后是

t = (a+b) > (c+d) ? (a+b) : (c+d) * 10

注意: * 10 成为了 “ ? : ” 表达式中最后一项的一部分
就是说最后一项便成了 (c+d) * 10

而 (a+b) 确实是大于 (c+d) 的,所以 *10 根本就没有运算到

a+b = 7

其实我也想了半天
这种的问题直接放到编译器里面反汇编一下就看出来了

计算到右括号为止。*100也等于7

路过

看看#define MAX(x,y) (x)>(y)?(x):(y)是什么意思