CppCoreGuidelines ES.31 不要用宏定义常量或“函数”
08 April 2023
“Don’t use macros for constants or “ functions ””
理由
很多 bug 是因为宏引起的。宏不遵循通常的作用域范围和类型规则。宏不遵循通常的参数传递规则。开发人员和编译器所看到的宏是有差异的。宏会把编译过程变得复杂。
坏例子
#define PI 3.14 #define SQUARE(a, b) (a * b)
以下例子更好:
constexpr double pi = 3.14; template<typename T> T square(T a, T b) { return a * b; }
强化
如果宏不是用于源码控制(如#ifdef
等),请尖叫吧