下面这个C语言选择题答案为什么是这样的呢?

来源:百度知道 编辑:UC知道 时间:2024/06/22 17:29:53
题目如下:
#define ADD(x) x+x
main()
{
int m=1,n=2,k=3;
int sum=ADD(m+n)*k;
printf("sum=%d",sum);
}
上面运行的结果是:____
A sum=9 B sum=10 C sum=12 D sum=18
答案是:B(经软件编译证明此答案正确)
疑问:我选的是D,ADD(m+n)的值应该是(1+2)+(1+2)=6吧,再乘以3不就是18了吗,可答案为什么。。。,请高人指点!谢谢啊

#define ADD(x) x+x
注意这个宏
ADD(m+n)*k 转换过来是m+n+m+n*k
就是1+2+1+2*3=10

宏是替代,就像x代表未知数一样,

应该是1+2+1+2×3,所以sum=10

注意,宏替换是机械的文本替换,不会做任何计算,所以ADD(m+n)*k展开后就是:

m+n+m+n*k

计算过程是:
(m+n+m)+n*k

而不是你所像的那样。

一起学习。

你的编译程序有问题