您的位置:首页 > 编程语言 > C语言/C++

条款02:尽量以const,enum,inline替换#define

2016-07-10 22:27 309 查看
在说明主题前,先描述#define的缺点:

1、#define定义的符号在预处理阶段,会被编译器替换成符号所代表的实际值。不利于程序的追踪。

2、#define没有作用域的概念。

3、#define表达能力有限。如:#define S(x) (x)*(x)。

欲解决问题,我们必须先了解什么情况会出现,为此,我们带着#define的使用展开,其使用可分为两种情况:

其一,如果#define仅仅是简单的符号定义,针对问题1,我们只需引入const修饰符或enum,不过根据#define使用的场合不同,具体的实现也不一样:

(a)当表达为全局常量或namespace常量时,直接用const修饰即可。

(b)当表达为类常量时,整型可定义为static const int…或enum {…}(enum hack),其他可定义为static const …,再在相应类实现里定义此常量。

解决了问题1,问题2也就迎刃而解。

另一种情况,如果#define是函数式定义,这种情况一般是为了节约函数调用开销,针对问题3,我们可以利用inline函数完美解决问题。

因此,尽量以const,enum,inline替换#define。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ #define