次のコードが与えられます:
void doSomething(int one, int two, int three)
{
//something here
}
#define ONE 1,2,3
#define TWO(arg) doSomething(arg);
#define THREE(arg) TWO(arg)
void doSomethingElse()
{
TWO(ONE)
THREE(ONE)
}
Visual Studio 2010には、次のプリプロセッサ出力があります(いくつかの空白行は省略されています)。
void doSomething(int one, int two, int three)
{
}
void doSomethingElse()
{
doSomething(1,2,3);
doSomething(1,2,3);
}
gcc4.2は次のようになります。
void doSomething(int one, int two, int three)
{
}
void doSomethingElse()
{
doSomething(1,2,3);
myFile.cpp:17:13: error: macro "TWO" passed 3 arguments, but takes just 1
TWO
}
どちらが標準かはわかりませんが、VisualStudioが機能しているように機能させたいと思います。両方のコンパイラでこのように機能するようにコードをリファクタリングする方法はありますか?