首先程序不对,应该这样才标准
#include<iostream>
#define M 1.5
#define A(a) M*a
int main()
{
int x(5),y(6);
std::cout<<A(x+y)<<std::endl;
system("pause");
return 0;
}
输出结果是13.5,很奇怪吧!
编译器会吧A(x+y)处理成1.5*x+y,自然结果为13.5,如果要使结果为16.5,需要改为这样:
#define A(a) M*(a)
这就是宏定义的危险之处——只进行简单的文本替换,一点安全性都没有,C++中应该避免这样的东西
——代码已在GCC中测试,不信的自己试试