我们都知道这个著名的宏示例:
#define max(a,b) ((a) > (b) ? (a) : (b))
而且,由于它使用a
andb
两次,所以当我们执行以下操作时它变得不准确:
max(x, y++); // because this gets translated to...
((x) > (y++) ? (x) : (y++)); // y is incremented twice
在Effective C++inline
中,Scott Meyers 提出了一个使用函数的 C++ 解决方案。
在21st Century C中,我希望有一个类似的 C 解决方案,但遗憾的是,它所建议的只是避免重复使用。这让我很难过。:'(
当然,总是可以用常规函数替换它。但我想知道是否有一个仅限 C 的宏解决方案来解决双重使用问题。任何可能的解决方案?