面试题答案
一键面试错误原因
宏定义 #define MULTIPLY(a, b) a * b
只是简单的文本替换。当 int result = MULTIPLY(2 + 3, 4);
进行宏替换后,会变成 int result = 2 + 3 * 4;
,根据运算符优先级,先计算乘法 3 * 4
得 12
,再加上 2
,结果为 14
,并非预期的 20
。
修正方法
将宏定义修改为 #define MULTIPLY(a, b) ((a) * (b))
。这样在进行宏替换时,int result = MULTIPLY(2 + 3, 4);
会替换为 int result = ((2 + 3) * (4));
,先计算括号内的加法 2 + 3
得 5
,再乘以 4
,结果为 20
。