我们都知道这个着名的宏观例子:
#define max(a,b) ((a) > (b) ? (a) : (b))
Run Code Online (Sandbox Code Playgroud)
而且,因为它使用a与b两次,就当我们做这样的事情变得不准确:
max(x, y++); // because this gets translated to...
((x) > (y++) ? (x) : (y++)); // y is incremented twice
Run Code Online (Sandbox Code Playgroud)
在Effective C++中,Scott Meyers使用inline函数为此提供了一个C++解决方案.
在21世纪的C中,我希望有一个类似的C解决方案,但遗憾的是它建议避免双重使用.这让我很伤心.:'(
当然,人们总是可以用常规功能替换它.但我想知道是否有一个只有C的宏解决方案,这解决了双重使用问题.任何可能的解决方
对于GCC,您可以使用typeof扩展名,如下所示:
#define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; })
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |