请记住:
- 对于单纯常量,尽量使用const对象或者enum替换#define
- 对于形似函数的宏,最好改用inline函数替换#define
这些规则其实就是让我们尽量以编译器替换预处理器,以防预处理器带来的种种问题
例如:
宏#define PI=3.14
编译器有可能看不到记号PI,也许编译器处理之前就被于处理器转移走了,但当你调试信息包含这个宏的错误时,可能显示3.14而不是PI,如果这个宏不是定义在自己的头文件,这时查找宏定义很麻烦,此时就可以以常量代替宏,
const double pi=3.14;
作为语言常量,pi肯定可以被编译器看到,并且不会像宏一样在每个地方展开替换,浪费空间
需要注意的是,常量通常定义在头文件中,另外有两点 1.如果处理常量指针,要两个const,不如使用const string ;2,如果处理class专属常量,为确保位于class域内,应该声明为members成员,为了只有一份实体,应该声明为static
如果编译器不支持类内初始值,就可以使用enum来实现;
另外如果宏是函数形式,就可以使用inline来替换,
但这不是说#define就可以完全放弃了,在预编译#ifdef/ifnde继续扮演中用作用