面试题答案
一键面试副作用分析
宏函数 SQUARE(x)
存在副作用,当传入表达式 a + 1
时,由于宏展开是简单的文本替换,会展开为 a + 1 * a + 1
,这与期望的 (a + 1) * (a + 1)
计算逻辑不符。按照运算符优先级,1 * a
先计算,导致结果错误。
改进方法
将宏函数定义修改为:
#define SQUARE(x) ((x) * (x))
这样在展开 SQUARE(a + 1)
时,会正确展开为 ((a + 1) * (a + 1))
,保证计算逻辑的正确性。
修改后的完整代码如下:
#define SQUARE(x) ((x) * (x))
int main() {
int a = 5;
int result = SQUARE(a + 1);
return 0;
}