VLAとその動作について、明確にする必要のあるいくつかの概念があります。
C99以降のAFIKでは、VLAをローカルスコープに宣言することができます。
int main(int argc, char **argv)
{
// function 'main' scope
int size = 100;
int array[size];
return 0;
}
ただし、グローバルスコープでは禁止されています。
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++の両方で禁止されていますか?グローバルスコープとローカルスコープへの配列の動作が異なる理由は何ですか?