なぜこれはVC 2005でコンパイルされませんか?プリプロセッサだけで出力を介してこれを実行するマルチパラメータ関数をマクロに渡す
bool isTrue(bool, bool) { return true; }
void foo();
#define DO_IF(condition, ...) if (condition) foo(__VA_ARGS__);
void run()
{
DO_IF(isTrue(true, true)); // error C2143: syntax error : missing ')' before 'constant'
}
:
bool isTrue(bool, bool) { return true; }
void foo();
void run()
{
if (isTrue(true true)) foo();;
}
は最後から二番目の行に不足しているカンマを注意してください。
最終編集:
LOL!
bool isTrue(bool, bool) { return true; }
void foo();
#define DO_IF(condition, ...) if (condition) { foo(__VA_ARGS__); }
void run()
{
DO_IF(isTrue(true ,, true)); // ROTFL - This Compiles :)
}
はプリプロセッサのバグである必要があります。 CPPはマクロパラメータを混乱させてはいけません。 – qrdl
プリプロセッサのバグのようです。ここから ます:http://msdn.microsoft.com/en-us/library/ms177415(VS.80)がC標準には少なくとも一つの引数がに、省略記号に渡さなければならないことを指定し を」.aspxのマクロが末尾のカンマを含む式に解決されないようにしてください。 代わりに、エラーの代わりに、入力をマングルしてtrueにします。 –
Microsoftが正しくありません。末尾のカンマを食べるには、## __ VAR_ARGS__を使うだけでよいので、少なくともGCCのドキュメントhttp://gcc.gnu.org/onlinedocs/cpp/Variadic-Macrosによれば、全くパラメータを指定することはできません。html – qrdl