なぜ GCC は C で可変サイズの配列を許可するのですか?

Mary-Kate Olsen
リリース: 2024-11-01 09:26:30
オリジナル
644 人が閲覧しました

Why does GCC allow variable-sized arrays in C  ?

C の可変サイズ配列 : GCC 拡張機能を使用したコンパイル

C では通常、配列サイズが定数の整数である必要があります。ただし、GCC は、配列サイズを宣言するために非定数変数の使用を可能にする拡張機能を提供します。

質問:

次のコードはなぜコンパイルに成功しますか? GCC?

<code class="cpp">void f(int i) {
    int v1[i];
}

int main() {
    int i = 3;
    int v2[i];
    f(5);
}</code>
ログイン後にコピー

答え:

この動作は、GCC によって導入された C 標準の拡張です。デフォルトでは、GCC では非定数変数を使用して配列サイズを指定できます。

ただし、次のような重要な注意事項があります。

  • 移植性に関する懸念事項:この拡張機能は C 標準の一部ではないため、コードは他の C ではコンパイルできない可能性があります。コンパイラ。
  • 可能性のある警告: この拡張機能を使用するときに GCC の -pedantic オプションを有効にすると、警告が発行されます。
  • 厳密モードのエラー: -std=c 98 を設定すると、GCC は非定数配列サイズの使用をエラー。

拡張機能の使用:

この拡張機能を利用するには、サイズとして非定数変数を使用して配列を宣言するだけです:

<code class="cpp">int arraySize = 5;
int myArray[arraySize];</code>
ログイン後にコピー

移植性の克服懸念事項:

移植性が懸念される場合は、可変サイズの配列の代わりに std::vector コンテナを使用できます:

<code class="cpp">std::vector<int> myVector(arraySize);</code>
ログイン後にコピー

この拡張機能を利用すると、より多くのメリットが得られます。動的な状況での配列サイズの管理における柔軟性。ただし、プロジェクトで使用する場合は、その制限を認識し、移植性への影響を考慮することが重要です。

以上がなぜ GCC は C で可変サイズの配列を許可するのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート