【发布时间】:2013-02-08 16:38:30
【问题描述】:
我已经开始阅读《Effective C++》,在第 2 项中的某个时间点,提到了以下内容:
// call f with the maximum of a and b
#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))
...
int a = 5, b = 0;
CALL_WITH_MAX(++a, b); // a is incremented twice
CALL_WITH_MAX(++a, b+10); // a is incremented once
这里是在调用 f 之前 a 递增的次数 取决于与之比较的对象!
确实,如果我在f 中使用简单的打印语句,第一次调用会打印 7,但我终其一生都无法弄清楚原因。我错过了一些明显的东西吗?
【问题讨论】:
-
@nhahtdh 不仅仅是“想”,宏做简单的文本替换。对于许多编译器(例如 g++),您可以要求在预处理器通过后查看代码。
标签: c++ macros effective-c++