const 常量有数据类型,而宏常量没有数据类型。所以编译器可以对const进行类型安全检查,但不会对宏做类型检查,只是简单的替换。在C++中,const已经完全可以取代宏变量了。
C默认const是外部链接的,所以const a;对于C编译器来说是正确的,它把语句作为一个声明,这个声明指明在别的地方有内存分配。
而C++默认内部链接,const a 语句会报错,应该改成 extern const a。
PS:在C++中,非const变量默认为外部链接。
宏不是函数,只是在编译前(编译预处理阶段)将程序中的有关字符串替换成宏体。
inline 函数时函数,但是在编译中不单独产生代码,而是将有关代码嵌入到调用处,从而省去了函数调用的系统开销。
与宏相比,inline更安全可靠,虽然这个是以空间开销为代价的。因此,除非一个小而简单的函数经常被重复调用,否则不建议使用内联函数。
宏的第一规则是:绝不应该去使用它,除非你不得不这么做。