可能性の重複:
Variably modified array at file scopeCでの可変長配列(VLA)とC++
私は明確にする必要がVLAとその動作についてのいくつかの概念を持っています。
int main(int argc, char **argv)
{
// function 'main' scope
int size = 100;
int array[size];
return 0;
}
しかし、それがグローバルスコープで禁止されています:
アフィクC99ので、それがローカルスコープにVLAを宣言することが可能です
const int global_size = 100;
int global_array[global_size]; // forbidden in C99, allowed in C++
int main(int argc, char **argv)
{
int local_size = 100;
int local_array[local_size];
return 0;
}
const
修飾子ので、上記のコードは、C99でVLAを宣言しますコンパイル時の値は作成されません。 C++では、global_size
はコンパイル時の値なので、global_array
はVLAにはなりません。
私が知る必要があるのは、私の推論は正しいのですか?私が記述した動作は正しいですか?
また知りたいことは:なぜグローバルスコープ内のVLAは許可されていないのですか? CとC++の両方で禁止されていますか?グローバルスコープとローカルスコープの配列の動作が異なる理由は何ですか?
グローバルVLAが許可されているとします。彼らの(可変)サイズはいつ実際に定義されていますか? – cnicutar
@cnicutarよく...他のスコープと同様に、実行時にはすべてのVLAと同様です。私はこれが答えではないことを知っていますが、私はWHYを知りたいのです。 –
http://stackoverflow.com/a/5052083/174605 – coelhudo