C++编程规范之16.避免使用宏

本文深入探讨了C++编程中宏的使用风险与限制,强调其可能导致的代码不可预测性与复杂性。建议在极少数情况下使用宏,并提供了替代方案以提高代码质量和可维护性。

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

摘要:

    宏是C和C++语言的抽象设施中最生硬的工具,它是披着函数外衣的饥饿的狼,很难驯服,它会我行我素地游走于各处。要避免使用宏。

    这一点在effective C++中也进行了解释。C++的宏的主要问题在于,他们表面上看起来很好,而实际上做的却是另一回事。宏会忽略作用域,忽略类型系统,忽略所有其他的语言特性和规则,而且会劫持它为文件其余部分所定义的符号。宏调用看上去很像符号或者函数调用,但实际上并非如此。宏不太“卫生”,也就是说,它会根据自己所使用时所处的环境引人注目而且令人惊讶地展开为各种东西。宏需要进行文本替换,因此编写远距离也正确的宏接近于一种魔法,而精通这种魔法既无意义也无趣。

    即使在极少情况下,有正当理由编写宏,也绝不要考虑编写一个以常见词或者缩略词为名字的宏。尽可能快地消除宏的定义,总是给他们取很明显的、大写的、很难看的名字,并且不要放在头文件中。

例外情况:

1.      宏仍然是几个重要任务的唯一解决方案,比如#include保护符,条件编译中的#ifdef和#if _defined,以及assert的实现。

2.      在条件编译中,要避免在代码中到处杂乱地插入#ifdef.相反,应该对代码进行组织,利用宏来驱动一个公共接口的多个实现,然后始终使用该接口。

3.如果不想到处复制和粘贴代码段,那么可以使用宏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值