Effective C++ 条款02

本文探讨了在编程中使用const,enum和inline替代宏定义#define的原因及好处,并通过示例说明了它们如何帮助提高代码质量和调试效率。

尽量以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会再计算一遍。

 

转载于:https://www.cnblogs.com/lucy-lizhi/p/7441009.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值