MST

星途 面试题库

面试题:C语言中#define定义复杂常量之表达式替换

在C语言中,使用#define定义一个复杂常量,用于计算圆的面积,公式为S = π * r * r ,π取值为3.14159,要求考虑半径r为浮点型变量的情况。请写出完整的#define定义,并说明在实际使用该常量时可能会遇到的问题。
44.7万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#define CIRCLE_AREA(r) (3.14159 * (r) * (r))

实际使用该常量时可能会遇到的问题:

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