08 April 2023

C++ 核心指南目录

“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等),请尖叫吧