我已经开始阅读《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
这里,a 在调用 f 之前递增的次数
取决于它与什么进行比较!
事实上,如果我在中使用一个简单的打印语句f
, 7 在第一次调用中被打印出来,但我一生都无法弄清楚为什么。我错过了一些明显的东西吗?
编译器会用您传入的内容逐字替换宏。所以你最终会得到
int a = 5, b = 0;
f((++a) > (b) ? (++a) : (b));
f((++a) > (b+10) ? (++a) : (b+10));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)