面试题答案
一键面试- result的值:
- result的值为11。
- #define宏定义替换过程:
- 宏定义
#define SQUARE(x) x * x
是简单的文本替换。 - 当遇到
int result = SQUARE(a + 1);
时,预处理器会将SQUARE(a + 1)
按照宏定义进行替换,替换后的代码为int result = a + 1 * a + 1;
。 - 在C++ 中,乘法优先级高于加法,所以先计算
1 * a
,a
的值为5,那么1 * a = 5
。 - 接着计算
a + 5 + 1
,即5 + 5 + 1 = 11
,所以result
的值为11。 - 这里体现了宏定义只是简单的文本替换,没有像函数调用那样的参数求值顺序和作用域等特性,可能会导致一些意想不到的结果,如这种优先级问题。如果要避免这种情况,可以将宏定义写成
#define SQUARE(x) ((x) * (x))
,这样替换后为int result = ((a + 1) * (a + 1));
,结果就是正确的36。
- 宏定义