麻烦高手给解释一下C语言的题

来源:百度知道 编辑:UC知道 时间:2024/05/13 10:38:11
#define ADD(x) x*x
main()
{
int a=4,b=6,c=7,d=ADD(a+b)*c;
printf("d=%d",d); }
这个程序是怎么运行的啊? 麻烦高手把过程分析一下 谢谢了
关键是d=ADD(a+b)*c 的分析啊 是怎么运算的

那是宏原样替换

容易误倒人的是ADD(x) x*x
它是先替换了再编译,而不是先计算出结果再替换

d=ADD(a+b)*c 容易被理解成(a+b)*(a+b)*c=10*10*7=700

实际上替换以后是ADD(a+b)变成了a+b*a+b
结果就是4+6*4+6*7=4+24+42=70

#define ADD(x) x*x
main()
{
int a=4,b=6,c=7,d=ADD(a+b)*c;
printf("d=%d",d); }

这里使用了宏
#define ADD(x) x*x
这里表示:程序在预编译的时候遇到ADD(x)的结构时自动将其替换成x*x

这样在你的程序被替换后就变成这个样子了:
int a=4,b=6,c=7,d=a+b*a+b*c;
printf("d=%d",d); }

所以我的理解你是不是想把算式变成这样:
d=(a+b)*(a+b)*c
那你应该把宏改写成:
#define ADD(x) (x)*(x)

d=ADD(a+b)*c=a+b*a+b*c
=4+6*4+6*7
=4+24+42
=70

------------------
宏命令是简单的替换:
d=ADD(a+b)*c=a+b*a+b*c

#define ADD(x) x*x
main()
{
int a=4,b=6,c=7,d=ADD(a+b)*c;
printf("d=%d",d); }

根据宏定义,展开后d=a+b*a+b*c
如果你的目的是想求(a+b)*(a+b)*c就要把宏定义改为
#define ADD(x) (x)*(x)

ADD(a+b) = a+b*a+b;

很简单,上面几个大虾都解释的很清楚