我们都知道这个著名的宏示例:最大宏的安全解决方案?
#define max(a,b) ((a) > (b) ? (a) : (b))
而且,因为它使用a
和b
两次,当我们做到这一点变得不准确是这样的:
max(x, y++); // because this gets translated to...
((x) > (y++) ? (x) : (y++)); // y is incremented twice
在有效的C++,斯科特Meyers使用inline
函数为此提供了一个C++解决方案。
在21世纪C,我希望有一个类似的C解决方案,但遗憾的是所有建议是避免双重使用。这让我难过。 :'(
当然,人们总是可以用常规的函数代替它,但我不知道是否有唯一的C-宏观地解决了这个,这解决了双重用途问题任何可能的解决方案
。?
究竟为什么要避免宏每当possib而不是相反。 – dbrank0
如果您对此感兴趣,实际上有一篇关于C++解决方案的有趣文章[此处](http://www.drdobbs.com/generic-min-and-max-redivivus/184403774)。 – chris
我没有答案,但是,无法停止表达式:在条件中使用递增/递减运算符不是我的事情 - 我认为这比编码中的高雅性或方便性更加模糊(针对人为错误)。 –