读书人

一个宏替换的有关问题

发布时间: 2012-02-27 10:00:22 作者: rapoo

一个宏替换的问题
#define s(x) (4*x*x+1)
main()
{
int i=6,j=8;
printf( "%d\n ",s(i+j));
}
这个结果是81为什么?

[解决办法]
宏展开后:s(i+j)=4*i+j*i+j+1=4*6+6*8+8+1=81

要先算i+j,第一行改:4*(x)*(x)+1
[解决办法]
#define s(x) (4*x*x+1) //--> 展开后就是(4*i+j*i+j+1=4*6+6*8+8+1)
main()
{
int i=6,j=8;
printf( "%d\n ",s(i+j));
}
这个结果是81为什么?

宏记住一定是原位置展开....
应该改写为(4*(x)*(x)+1)
不过这个宏在逻辑上是不好的
如果s(i++)
那这个地方就可能出现不必要的错误.
这里替换成inline的更好.

读书人网 >C++

热点推荐