首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个宏替换的有关问题

2012-02-27 
一个宏替换的问题#defines(x)(4*x*x+1)main(){inti6,j8printf( %d\n ,s(i+j))}这个结果是81为什么?[

一个宏替换的问题
#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的更好.

热点排行