这个程序编译器出来是12,j的值为什么啊

#define MIN(x,y) (x)<(y)?(x):(y)
main()
{int i=10,j=12,k;
k=10*MIN(i,j);
printf("%d",k);
}

因为宏替代后是这样的:
k = 10 * (i) < (j) ? (i):(j);
这里比较的是10*i和j的大小,也就是100和12的大小,显然100更大,所以就是k = j,因此k值为12

img



#include<stdio.h>
#define MIN(x,y) ((x)<(y)?(x):(y))
main()
{
    int i = 10, j = 12, k;
    k = 10 * MIN(i, j);
#if 0
    这里被展开成k = 10 * (x) < (y) ? (x) : (y);
    相当于k = 10 * 10 < 12 ? 10 : 12;
    很明显k = 12
        想答案正确看上面添加括号
#endif
    printf("%d", k);
}