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