C の VLA : 非標準機能にもかかわらずコンパイラが受け入れられる
C99 で導入された可変長配列 (VLA) は正式にサポートされていませんC で。しかし、 g や clang などのコンパイラは、-pedantic フラグが有効な場合に警告を生成するにもかかわらず、驚くべきことに VLA 宣言を許可します。
コンパイラの受け入れ
コンパイラによる VLA の受け入れはC コンパイラの動作のレガシーへの準拠から。特に GCC は、VLA を許可していた古い C コンパイラとの互換性を維持しています。
標準的な意味
コンパイラは受け入れているにもかかわらず、C は配列宣言文法で VLA を明示的に禁止しています。 [dcl.array]: 配列サイズ指定子として使用できるのは定数式のみです。あなたの例では、n はこの要件を満たしていません。
コンパイラ実装
標準では VLA が禁止されていますが、VLA をサポートするコンパイラは拡張機能を通じて許可しています。具体的な実装の詳細はコンパイラによって異なります。たとえば、 g と clang の場合、VLA はスタック上の通常の配列として実装され、そのサイズは実行時に動的に割り当てられます。
以上が標準で禁止されているにもかかわらず、C コンパイラが VLA を受け入れるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。