第二条:尽量以const、enum、inline代替#define

请记住:

  1. 对于单纯常量,尽量使用const对象或者enum替换#define
  2. 对于形似函数的宏,最好改用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继续扮演中用作用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值