私はこれらを見てきましたが、私の質問に答えていません:
C コンパイル エラー:「可変サイズ オブジェクトが初期化されていない可能性があります」
エラー: 可変サイズ オブジェクトが初期化されていない可能性があります。しかし、なぜ?
私はかなりポータブルなc
コードを書こうとしています:
int main ()
{
const int foo=13;
int bar[foo]={0};
return 0;
}
次のいずれかを使用してコードとしてコンパイル
すると、variable-sized object may not be initialized
エラーが発生します。c
- gcc 4.3.4
- arm-linux-gnueabi-gcc 4.4.5
そして、VS2008のようc
にコンパイルすると、少し異なりますerror C2057: expected constant expression
ここで、c
コード コンパイラがconst int foo=13;
真に一定であることを認識していないことを理解しています。たとえば、
void a(int fool)
{
const int foo=fool;
int bar[foo]={0};
}
また、gcc コンパイラとは異なり、 VS2008コンパイラにはC99 可変長配列の概念がないことも認識しています。そして、その MS は明らかに将来のサポートについて言及していません。
それでも、gccコンパイラまたはMScpp
コンパイラを使用したコードのコンパイルは、まったく異なります。
また、 gccコード コンパイラに関して私が理解していないことは次のとおりです。 c
- このコード はコンパイルされるため、
- このコードがコンパイルさ れない理由..
- それでも、このコード はコンパイルされますか?
(注: この最後のケースでは、MS c
コードのコンパイルは失敗します。一貫して と同様ですint bar[foo]={0};
)