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

本文探讨了在编程中如何更高效地使用宏定义,并建议使用const对象或enum替代常量宏,使用inline函数替代函数式宏,以减少预处理器带来的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请记住:

  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继续扮演中用作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值