MSVC のみのCコードで奇妙なコンパイル エラーが発生します。より正確に:
エラー C2143: 構文エラー: ';' がありません 「タイプ」の前に
C2143 はかなり一般的なエラーであり、SO に関する質問は無数にありますが、今のところどれも当てはまらないようです。最も近いものはここで見つけることができ、ブロックの先頭で変数を宣言することの重要性を強調しています。これはここで尊重されているようです.
サンプルコードは次のとおりです。
#define NB_LL 6
typedef struct { long long ll[NB_LL ]; } stateSpace_t;
#define ALLOCATE_ONSTACK(stateName) stateSpace_t stateName##_s; void* stateName = (void*) &(stateName##_s);
次のコードはうまく機能します。
void f1()
{
ALLOCATE_ONSTACK(state1);
/* do something */
}
これはしません:
void f2()
{
ALLOCATE_ONSTACK(state1);
ALLOCATE_ONSTACK(state2); // <--- error C2143: syntax error : missing ';' before 'type'
/* do something */
}
2 番目のコードは GCC でうまく機能するため、問題は MSVC に限定されているようです。私の理解では、マクロALLOCATE_ONSTACK()
は変数の宣言と初期化のみを行うため、C構文を尊重しているようです。
それは...ですか?