私たちは皆、この有名なマクロの例を知っています:
#define max(a,b) ((a) > (b) ? (a) : (b))
そして、a
and をb
2 回使用するため、次のようなことを行うと不正確になります。
max(x, y++); // because this gets translated to...
((x) > (y++) ? (x) : (y++)); // y is incremented twice
効果的な C++で、Scott Meyers は、関数を使用して、これに対する C++ ソリューションを提示しますinline
。
21st Century Cでは、同様の C ソリューションを期待していましたが、残念ながら、二重使用を避けるようにというアドバイスしかありませんでした。それは私を悲しくさせました。:'(
もちろん、いつでも通常の関数に置き換えることができます。しかし、二重使用の問題を解決する C のみのマクロ ソリューションがあるかどうか疑問に思っていました。可能な解決策はありますか?