C における可変長配列 (VLA) のコンパイラーの受け入れ
C 標準には可変長配列 (VLA) が存在しないにもかかわらず、 g や Clang などのコンパイラは、驚くべきことに VLA 構文を受け入れます。このため、コンパイラの動作とこの非標準機能の影響について疑問が生じています。
コンパイラ耐性
コンパイラによる VLA の受け入れは、その固有の設計に起因しています。 GCC は特に、レガシー C コンパイラとの互換性を優先し、技術的には C 標準の一部ではない場合でも VLA 構文を認識できるようにします。
標準の位置
C の文法では、配列サイズは定数式でなければならないと指定されています。 VLA は変数式を使用するため、このルールに違反するため、C 標準の一部とみなされません。
コンパイラ実装
C コンパイラの VLA は、コンパイラ拡張機能として実装されます。 。コンパイラは、通常の配列と同様に、実行中に配列をスタックに割り当てることによってそれらを処理します。ただし、標準ではこの動作が定義されていないため、コンパイラごとに変動する可能性があります。
結果
C で VLA を使用すると、いくつかの影響が生じます。
以上が標準で禁止されているにもかかわらず、一部の C コンパイラが可変長配列 (VLA) を受け入れるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。