C および C の可変長配列 (VLA)
C の可変長配列 (VLA) に関する動作と制限について問い合わせています。および C .
ローカルの可変長配列範囲
あなたの理解は正確です。 C99 では、例で示すように、ローカル スコープ内で VLA を宣言できます:
int main(int argc, char **argv) { int size = 100; int array[size]; return 0; }
グローバル スコープの可変長配列
ただし、VLA は実際には禁止されていますC99 のグローバル スコープ内。具体的には:
const int global_size = 100; int global_array[global_size]; // forbidden in C99, allowed in C++
この制限の理由は、const 修飾されたオブジェクトが C では整数定数式とみなされないため、コンパイラーがコンパイル時に VLA のサイズを決定できないという事実にあります。したがって、グローバル スコープでこのような VLA を宣言することは禁止されています。
動作の違い
グローバル配列にはサイズがあるため、この動作はグローバル スコープとローカル スコープの配列の動作とは異なります。ローカル スコープ内の VLA のサイズはコンパイル時に変数の値に基づいて動的に計算される場合がありますが、コンパイル時に決定されます。 run-time.
C での VLA サポートの欠如
C99 とは異なり、C では VLA の使用が許可されていません。代わりに、C は、動的メモリ割り当てや、さまざまな配列サイズに対応するベクトルや配列などのコンテナ クラスなどの機能を提供します。
結論として、C と C の VLA に関する動作と制限についての理解は正しいです。 VLA はローカル スコープでは許可されますが、C99 のグローバル スコープでは許可されず、C ではサポートされません。これらの制限は、コンパイル時に VLA のサイズを決定する必要があることから生じていますが、グローバル変数では常にそれが可能であるとは限りません。
以上が可変長配列 (VLA) は C および C のグローバル スコープとローカル スコープで使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。