Visual Studio 2005 では、次のようなマクロがあります (例示!!):
#define MY_CALL(FUN, ...) \
if(prepare(x, y)) { \
FUN(__VA_ARGS__); \
}
/**/
関数が少なくとも 1 つの引数を取る限り、問題ありません。
関数が引数を取らない場合、プリプロセッサは「役立つように」「末尾のコンマ」を削除し、次のように展開します。
if(prepare(x y)) { funct(); }
いいですね。
__VA_ARGS__
Visual C++ (VS 2005)でゼロで動作するように、このマクロを修正するにはどうすればよいですか?
どうやらこれは VS2005 のバグです。