VLA は C99 で標準化されましたが、C 標準の一部ではありません。それにもかかわらず、g や clang などのコンパイラは、-pedantic フラグの下で警告を付けて VLA 宣言を受け入れます。
コンパイラは、レガシー コードやプログラマーの利便性を高めるため。この場合、コンパイラの作成者は、C99 から C への移行を容易にするために VLA 宣言を許可することを選択しました。
C 標準では、配列は定数サイズでのみ宣言できると明示的に規定されています。コンパイル時にサイズが不明な VLA 宣言は、このルールに違反するため、C では違法とみなされます。
標準の禁止にもかかわらず、コンパイラーは VLA をコードに変換します。スタック上にメモリを割り当てるようです。ただし、この動作は C 標準では指定されておらず、単にコンパイラの実装の詳細です。
VLA は特定のシナリオでは柔軟性を提供しますが、そうではないことを理解することが重要です。 C 標準の一部。コンパイラは互換性の理由からこれらを受け入れる場合がありますが、それらの使用には注意が必要であり、標準に準拠したコードで依存すべきではありません。サポートされている特定の非標準機能については、必ずコンパイラのドキュメントを参照してください。
以上がC コンパイラは可変長配列 (VLA) を受け入れますか? 受け入れる場合、その理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。