面试题答案
一键面试#define CIRCLE_AREA(r) (3.14159 * (r) * (r))
实际使用该常量时可能会遇到的问题:
- 宏展开的副作用:由于宏是简单的文本替换,若
r
是一个表达式,如a + b
,宏展开后为3.14159 * (a + b) * (a + b)
,可能因为运算符优先级导致计算结果与预期不符,需格外注意在宏定义和使用时添加适当括号。 - 类型检查缺失:宏不进行类型检查,如果在调用
CIRCLE_AREA
时传入了非浮点型的参数,编译时不会报错,但运行结果可能不正确。 - 代码可读性与调试:宏定义只是简单替换,在复杂表达式中使用时,代码可读性可能变差,调试时难以直接定位到宏展开后的实际问题,不如函数调用直观。