MST

星途 面试题库

面试题:C语言宏函数中副作用的分析与避免

以下代码中存在一个宏函数定义及使用,分析这段代码可能存在的副作用,并给出改进方法。 ```c #define SQUARE(x) x * x int main() { int a = 5; int result = SQUARE(a + 1); return 0; } ```
33.0万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

副作用分析

宏函数 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;
}