宏定义在预处理阶段进行,主要做的是字符替换工作,所以它存在着一些固有的缺陷
- 它无法进行类型检查。宏定义是在编译前进行字符的替换,因为还没有编译,不能编译前就检查好类型是否匹配,而只能在编译时才知道,所以不具备类型检查功能。
- 由于优先级的不同,使用宏定义时,可能会存在副作用,如,执行加法操作的宏定义运算#define ADD(a + b) a + b在使用的过程中,对于表达式的运算就可能存在潜在的问题,而应该改为 #define ADD(a + b) ((a) + (b)).
- 无法单步调试。
- 会导致代码膨胀。由于宏定义是文件替换,需要对代码进行展开,相比较函数调用的方式,会存在较多的冗余代码。
- 在C++中,使用宏无法操作类的私有数据成员
3854

被折叠的 条评论
为什么被折叠?



