此题答案是什么,为何?
#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
[解决办法]
楼主只要记住一点以后这种问题就不会出错了 宏就是代码替换