ホームページ >バックエンド開発 >C++ >C には可変長配列 (VLA) が存在しますか?

C には可変長配列 (VLA) が存在しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-16 13:11:03785ブラウズ

Do Variable Length Arrays (VLAs) Exist in C  ?

C の可変長配列

C は可変長配列 (VLA) をサポートしていないという一般的な前提にもかかわらず、それを実現する方法はあります。同様の機能。ただし、これらのメソッドの使用は、すべてのコンパイラ間での互換性が保証されているわけではないことに注意することが重要です。

コードの説明

提供されたサンプル コードは、次の理由によりコンパイルされ、動作します。

  • GCC 互換性: GCC バージョン 4.7 以降のサポート拡張機能としての VLA。これは、コードが GCC でコンパイルされると、int a[n]; が解釈されることを意味します。
  • 自動ストレージ割り当て: VLA は、関数の開始時に自動的に割り当てられるメモリの一種であるスタックに保存されます。したがって、コードでは、ユーザーが入力した n の値に基づいて a がスタック上に割り当てられます。

標準サポート

注意が重要です。 C 標準では VLA をサポートするコンパイラは必要ありません。したがって、VLA を使用するコードは、異なるコンパイラやプラットフォーム間で移植できない可能性があります。

C 14 および C 17 の提案は失敗しました

VLA は当初、次のように提案されました。 C 14 標準に含まれています。しかし、この提案は投票プロセスを通過せず、VLA は言語に追加されませんでした。この提案は、C 17 に含めることも受け入れられませんでした。

結論

VLA は正式には C 標準の一部ではありませんが、拡張機能として使用できます。 GCC などの特定のコンパイラでは。ただし、潜在的な移植性の問題を認識し、特にクロスプラットフォーム コードでは VLA を慎重に使用することが重要です。

以上がC には可変長配列 (VLA) が存在しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。