MST

星途 面试题库

面试题:C语言宏调试之常见错误定位

假设在C语言代码中有如下宏定义:#define MULTIPLY(a, b) a * b 。在使用该宏时,代码int result = MULTIPLY(2 + 3, 4); 得到的结果并非预期的20 ,请分析可能导致此错误的原因,并说明如何修正。
36.9万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

错误原因

宏定义 #define MULTIPLY(a, b) a * b 只是简单的文本替换。当 int result = MULTIPLY(2 + 3, 4); 进行宏替换后,会变成 int result = 2 + 3 * 4; ,根据运算符优先级,先计算乘法 3 * 412,再加上 2,结果为 14,并非预期的 20

修正方法

将宏定义修改为 #define MULTIPLY(a, b) ((a) * (b)) 。这样在进行宏替换时,int result = MULTIPLY(2 + 3, 4); 会替换为 int result = ((2 + 3) * (4)); ,先计算括号内的加法 2 + 35,再乘以 4,结果为 20