关于预编译处理命令的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;
}

c

6个回答

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

  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;

对,答案是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了

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;

qq_35280514
riskLoveHe 对不起 宏体打错了。应该是小于号,输出结构应该是j的值15.顺便请教一下如何修改回答?
4 年多之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐