《Effective C++读书笔记》--条款02尽量以const,enum,inline替换#define

本文探讨了在编程中使用宏定义的两个主要问题:简单的字符串替换可能导致逻辑错误且难以调试;宏定义未经过编译器处理,导致错误信息难以理解。通过具体示例说明为何现代编程实践建议避免使用宏。

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

使用宏定义是一个不被推荐的做法,在阅读了书籍并且结合自身所读过的博客,总结以下两点不推荐使用宏定义的理由。

--1、宏定义是简单的字符串替换:
由于宏定义只是进行简单的字符串替换,因此有可能会造成意想不到的情况。典型的一个例子就是#define x+x 2x,当我们使用2x*2x时,我们的意图是得到(x+x)*(x+x),即4x,但实际上由于字符串替换 2x*2x相当于x+x*x+x=x+x^2+x=x^2+2x,违背了我们原本的意图,像这样的情况有时候很难检查出来。


--2、宁以编译器替换预处理器:

对于宏定义的记号,例如#define π 3.14,记号π从未被编译器看见,于是当运用此常量但获得一个编译错误信息时,你可能感觉困惑,无法准确定位问题到底出现在哪里。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值