总结一句话就是:宏必须是参数替换,不能按值传递。讲一下下面的例子大家就懂了
#define SQUARE(X) X*X
//这并不是通过传递参数实现的,而是通过文本替换来实现的--X是参数的符号标记
a = SQUARE(5.0);//is replaced by b = 4.5+7.5*4.5+7.5;
d = SQUARE(5.0);//is replaced by d = c++*c++
//宏不能按值传递,即使使用新的定义,SQUARE(C++)仍然将C递增两次
如果使用一个定义的inline函数square()计算c的记过,传递他,以计算其平方值,然后将C递增一次