Effective C++ 条款02

尽量以const,enum,inline 替换#define。 Prefer const,emum,and inline to #define.

 

#define 是预处理器处理,不是编译器处理,换句话说,#define 处理的时间在编译之前。这样做的根本出发点在于有益于调试程序,当一个程序编译后,程序的内容全部会进入一个叫符号表的内存区域,但是#define的内容不会进入。所以如果程序编译出错后,这样对于我们来说,很容易混淆。

 

另外,这里记录一个让人容易混淆的问题。

 

我们有定义:

#define COMPARE(a,b) (a)>(b)?(a):(b) 

int i=5,b=0

那么COMPARE(++a,b) 这里返回的是7,如果COMPARE(++a,b+10) 返回的会是10.

实际上这里需要理解define 的替代是这样做的: 

 (++a)>(b)?(++a):(b)

如果最后是a的值大,那么返回时,a会再计算一遍。

 

posted on 2017-08-27 17:55  ^~~^  阅读(97)  评论(0编辑  收藏  举报

导航