次のC++コードは、GCC(4.0.4)で意図されたプログラマーとしてコンパイルおよび動作します。
#define FOO(x,y,z) ((x)*(y)*(z))
#define BAR(x) FOO(x,1)
#define BAZ 3,7
int main()
{
return BAR(BAZ); /* interpreted as return ((3)*(7)*(1)); */
}
ただし、マクロにより、Microsoft Visual C ++Express2010でエラーが発生します。
main.cpp(7):警告C4003:マクロ'FOO'の実際のパラメーターが不足しています
main.cpp(7):エラーC2059:構文エラー:')'
問題は、MicrosoftコンパイラがBARマクロを内部で処理しているときに、BAZマクロをマクロFOOの2つの別個のパラメータとして使用できるパラメータに展開しないことであると思われます。
標準によると、どのコンパイラが状況を正しく処理しますか?