【转载】宏定义的经典错误

在百度知道中看到一则经典的宏定义错误。鉴于MFC,Windows SDK中将有很多宏定义的东西,特此记录,以作提醒。

 

#define S(x) x*x
int y,z=10;
y = S(z+1)

等价于
int y,z=10;
y = z+1*z+1
所以y=10+1*10+1=21

如果
#define S(x) (x)*(x)
int y,z=10;
y = S(z+1)
等价于
int y,z=10;
y = (z+1)*(z+1)
所以y=11*11=121

宏定义只是简单的文字替换,只要按照替换规则小心替换,然后求值即可

posted @ 2008-07-25 00:12  斌伯  阅读(308)  评论(0编辑  收藏  举报