コンパイラ: Microsoft Visual C++ 2010 Express、SP1 プロジェクト プロパティ: C/C++ Advance コンパイル形式: C コードとしてコンパイル (/TC)
メッセージ:
error C2099: initializer is not a constant
エラーを示す単純なテスト ケース:
typedef struct
{
char *stringP;
int lino;
} foo_t;
#define bad {static foo_t foo ={__FILE__,__LINE__};}
#define good {static foo_t foo ={"filename",10};}
int main()
{
bad; // error C2099: initializer is not a constant
good; // no error
return 0;
}
これにより、C2099
エラーが発生します。このコードは gcc では正しくコンパイルおよびリンクされますが、Visual C++ 2010 Express では正しくリンクされません (C コードとしてコンパイル - つまり /TC オプション)。