面试题答案
一键面试使用 #define
定义复杂常量
#define MAX(a, b) ((a) > (b)? (a) : (b))
- 优点:
- 性能:由于是在预处理阶段进行替换,没有函数调用开销,在频繁计算的场景下性能较好。
- 代码可读性:使用起来较为直观,类似于函数调用的形式,容易理解。
- 维护性:如果逻辑简单,修改方便,一处修改处处生效。
- 缺点:
- 性能:宏定义可能会导致代码膨胀,特别是在大量使用的情况下。
- 代码可读性:对于复杂的宏定义,可能难以理解其具体逻辑,特别是在嵌套使用时。
- 维护性:宏定义没有类型检查,如果传入的参数类型不匹配,可能导致难以排查的错误。
使用宏函数
#define MAX(a, b) ((a) > (b)? (a) : (b))
宏函数与使用 #define
定义复杂常量的形式相同。但在理解上,这里强调它作为宏函数的角色。
- 优点:
- 性能:同
#define
定义复杂常量,在预处理阶段替换,无函数调用开销,性能好。 - 代码可读性:直观,像函数调用。
- 维护性:简单逻辑修改方便。
- 性能:同
- 缺点:
- 性能:代码膨胀问题。
- 代码可读性:复杂逻辑时理解困难。
- 维护性:无类型检查,参数类型不匹配易出错。
适用场景
- 适合使用
#define
定义复杂常量的场景:- 逻辑非常简单,且不会导致代码过度膨胀的情况。例如,只是简单比较两个数大小,且使用频率高,对性能要求严格。
- 用于定义一些通用的、不会改变且与具体类型无关的常量表达式。
- 适合使用宏函数的场景:
- 当需要实现较为复杂的逻辑运算,且希望在预处理阶段进行计算以避免函数调用开销时。例如,不仅是比较大小,还可能涉及一些其他简单运算组合。
- 对类型要求不严格,希望以简洁的方式实现功能的场景。