请各位朋友帮帮忙,c语言这个程序具体是怎样运行?

来源:百度知道 编辑:UC知道 时间:2024/06/05 19:38:52
#include<stdio.h>
#define pt 5.5
#define s(x) ((pt)*x*x)
main()
{ int a=1,b=2;
printf("%4.lf\n",s(a+b));
}
答案是9.500000,为什么?

#define pt 5.5
#define s(x) ((pt)*x*x)
s(1+2)时,相当于X=1+2
所以变成((5.5)* 1+2 * 1+2)
应该定义成:
#define pt 5.5
#define s(x) ((pt)*(x)*(x))
才得到预期的结果.
此时:
s(1+2)时,相当于X=1+2
所以变成((5.5)*(1+2)*(1+2))

·

关键是这句:
printf("%4.lf\n",s(a+b));

宏定义代入后的为:printf("%4.lf\n",(5.5)*1+2*1+2);

5.5*1+2+2=9.5

所以。。。

关键是宏代入的问题。。要明白宏代入是在编译之前的简单的替换。。。。

有不明白的,百度消息我。。