我們都知道這個著名的宏示例:最大宏的安全解決方案?
#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
我沒有答案,但是,無法停止表達式:在條件中使用遞增/遞減運算符不是我的事情 - 我認爲這比編碼中的高雅性或方便性更加模糊(針對人爲錯誤)。 –