SOS!C语言宏定义问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 14:36:43
#define pi 3.14
#define Area(R) pi*R*R
main()
{
int r1=5,r2=2;
double s=0;
s=Area(r1-r2);
printf("The area is %f",s);
}
这个程序运行结果是:3.700000
我想问一下各位大师.这个宏替换的过程是如何执行的,并运行正确的结果?越详细越好, 在这里谢谢各位了哦,呵呵

Area(r1-r2)=pi*5-2*5-2
=12.7-10-2
=3.7

宏定义只是单纯替换,应该写Area((r1-r2))

首先,我要说的是这是个很基础的问题。
宏替换只进行简单的文本替换,不做检查。在Area中简单地用r1-r2替换宏中的R,如下所示:
s=pi*r1-r2*r1-r2
主要没有括号。以上所得结果即为:3.700000。
至此,你的问题已经解决。为有助于你的加深理解,假如把宏重新定义为:
#define Area(R) (pi*(R)*(R))
则宏展开时为下面的:
s=pi*(r1-r2)*(r1-r2)
此时有括号,主要两者的区别。
定义宏时,正确的方法就是后者,前面的(你定义的宏)为错误的。

s=Area(r1-r2)
在预处理之后会被替换成
s=3.14*r1-r2*r1-r2
答案自然是3.7
宏只做最简单的事情:字符替换