面试题答案
一键面试- 结果:
当使用
SQUARE(3 + 2)
时,结果为11
。 原因是宏替换是简单的文本替换,SQUARE(3 + 2)
会被替换为3 + 2 * 3 + 2
,根据运算符优先级,先计算乘法,2 * 3
得6
,然后再依次计算加法,3 + 6 + 2 = 11
。 - 修改宏定义以避免问题:
可以将宏定义修改为
#define SQUARE(x) ((x) * (x))
。这样,SQUARE(3 + 2)
会被替换为((3 + 2) * (3 + 2))
,先计算括号内的加法,3 + 2
得5
,再计算乘法,5 * 5 = 25
,得到正确的平方结果。