使用宏定义是一个不被推荐的做法,在阅读了书籍并且结合自身所读过的博客,总结以下两点不推荐使用宏定义的理由。
--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,记号π从未被编译器看见,于是当运用此常量但获得一个编译错误信息时,你可能感觉困惑,无法准确定位问题到底出现在哪里。