为什么结果为7,而不是70?

#include <stdio.h>
#define MAX(x,y) (x)>(y)?(x):(y)
int main()
{
int a=5,b=2,c=3,d=3,t;
t=MAX(a+b,c+d)*10;
printf("%d\n",t);
}

img

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


记住define只是替换,所以t=MAX(a+b,c+d)*10;这一行实际变成了
t=(a+b)>(c+d)?(a+b):(c+d)*10;  乘号的优先级要高于三目运算符,所以*10是先跟(c+d)进行运算了。

如果要结果是70,应该加个括号t=( MAX(a+b,c+d) )*10;

t=MAX(a+b,c+d)*10; 这一句还原:

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

相当于

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

所以是7