读书人

此题答案是什么为何?解决思路

发布时间: 2012-06-14 16:00:31 作者: rapoo

此题答案是什么,为何?
#include<iostream.h>
#define MA(x) x*(x-1)
main()
{
int a=1,b=2; cout<<MA(1+a+b);
}

[解决办法]
宏是字符串替换,所以变成了

1+a+b*(1+a+b-1) = 1 + 1 + 2 * (1 + 1 + 2 - 1) = 8

正确写法是
#define MA(x) (x)*(x-1)
[解决办法]
就是:
1 + a + b * (1 + a + b - 1)
[解决办法]
cout<<MA(1+a+b);通过宏展开是

cout<<1+a+b*(a+b);

把数值代入就知道了是8
[解决办法]
楼主只要记住一点以后这种问题就不会出错了 宏就是代码替换

读书人网 >C++

热点推荐