关于预编译处理命令的C语言基础题

下列程序执行后输出的结果是
#include
#define MIN(x,y) (x)<(y)?(x):(y)
int main()
{
int i=10,j=15,k;
k=10*MIN(i,j);
printf("%d\n",k);
return 0;
}

宏是由预编译器处理的。理解这段代码主要是要明白于编译器如何处理宏。
预编译器对宏执行**简单替换**。

  k = 10*MIN(i,j);

MIN(i,j) 替换为(i) < (j) ? (i) : (j) ,替换后与下面的代码等价

  k = 10 * (i) < (j) ? (i) : (j);

这样就很好理解了,根据算符优先级,乘法先计算所以上述代码与下面的代码等价:

  k = (10 * i ) < j ? i : j;

这样10 * i < j 不成立。j赋值给k,输出值为j的值15;

K=10*10 结果是100

宏是由预编译器处理的。理解这段代码主要是要明白于编译器如何处理宏。
预编译器对宏执行**简单替换**。

 k = 10*MIN(i,j);

MIN(i,j) 替换为(i) > (j) ? (i) : (j) ,替换后与下面的代码等价

 k = 10 * (i) < (j) ? (i) : (j);

这样就很好理解了,根据算符优先级,乘法先计算所以上述代码与下面的代码等价:

 k = (10 * i ) > j ? i : j;

这样10 * i > j成立。i赋值给k,输出值为i的值10;

楼上说的很详细,答案是15
可以参考这篇博文:
http://blog.csdn.net/wzxq123/article/details/51475513

对,答案是15,因为在预处理阶段,将宏替换了:
10*i<j?i:j 中如果不带括号的话,则乘法的优先级比较高,,所以先计算10*i即100;100<15不成立,所以输出j,即结果为15

宏不是函数,宏展开就是相当于套公式
展开之后就是

10 * MIN(i,j)
= 10 * (10)>(15)?(10):(15);
= 100 > 15?10:15
因为100 大于15,所以结果就是10了