プログラミングの分野では、特定の概念について疑問が残ることがあります。そのようなトピックの 1 つは、 C および C での可変長配列 (VLA) の使用です。これらの動作を明確にするために、いくつかの重要なポイントを掘り下げてみましょう。
VLA のローカル スコープ宣言
前述したように、C99 ではローカル スコープ内で VLA を宣言する機能が導入されました。これは確かに真実です。実行時に配列のサイズを動的に指定することで、次のように VLA を作成できます。
int main(int argc, char **argv) { int size = 100; int array[size]; return 0; }
グローバル VLA 宣言の制限
ただし、ご覧のとおり、VLA は C99 のグローバル スコープで禁止されています。ここであなたの推論が役に立ちます。 C99 では、const 修飾子はコンパイル時の値を保証しません。したがって、例の global_array は VLA のままであり、禁止事項に違反します。
ただし、C では、 const はコンパイル時の評価を強制します。その結果、global_size はコンパイル時の定数になり、global_array は VLA ではなくなりました。
グローバル VLA の制限理由
での VLA の禁止グローバルな範囲は実際的な考慮事項から生まれます。別のコンパイル単位のオブジェクトを参照する式によってサイズが決定されるグローバル VLA を想像してください。評価順序の決定は困難になり、そのような複雑な依存関係は予測不可能な動作を引き起こす可能性があります。
動作の違い
グローバル スコープとローカル スコープでの VLA と配列の動作は次のとおりです。確かに違います。グローバル配列のサイズは固定であり、コンパイル時に決定されます。対照的に、ローカル スコープの VLA は、入力または実行時の条件に基づいてサイズを動的に調整できます。
要約すると、VLA は C99 以降のローカル スコープで宣言できますが、C99 以降のグローバル スコープでは宣言できません。一貫性と明確さの理由。グローバル スコープとローカル スコープの配列の動作は、固定サイズまたは可変サイズの特性により異なります。
以上がC および C の可変長配列 (VLA) のルールと制限は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。