//Project - Macro
#include <iostream>
using namespace std;
#define SQUARE(x) x*x
int main() {
cout << SQUARE(3) << endl; //3的平方,预期输出为9
cout << SQUARE(3+2) << endl; //3+2的平方,预期输出为5的平方,即25
return 0;
}
SQUARE(3+2)的结果是11,为什么?
执行结果不符预期的原因与预处理器的工作原理有关, 宏定义SQUARE(x)是在预处理阶段由预处理器展开的,而展开的方式就是简单的文本替换。 对于预处理器而言,SQUARE(3+2)中的x即为“3+2”,按定义展开后是这样的:
3+2*3+2