ホームページ > バックエンド開発 > C++ > 定数配列バインドのルールにもかかわらず、この C コードで可変長配列が機能するのはなぜですか?

定数配列バインドのルールにもかかわらず、この C コードで可変長配列が機能するのはなぜですか?

DDD
リリース: 2024-12-16 11:40:10
オリジナル
108 人が閲覧しました

Why Do Variable-Length Arrays Work in This C   Code Despite the Constant Array Bound Rule?

定数配列バインド要件にもかかわらず、C での可変長配列

C では、配列バインドは定数式でなければならないと述べられています。ただし、特定のコード シナリオでは、エラーは発生せずにこのルールに違反しているようです。次の例を考えてみましょう。

#include <iostream>
using namespace std;

int main(){
    int n=10;
    int a[n];

    for (int i=0; i<n; i++) {
        a[i]=i+1;
        cout<<a[i]<<endl;
}
    return 0;
}
ログイン後にコピー

教科書に従って、n は定数式ではないため、このコードではエラーが発生します。驚くべきことに、Mac 上の Xcode4 では問題なく実行されます。この明らかな矛盾は何で説明されるのでしょうか?

その答えは、可変長配列 (VLA) と呼ばれる C99 機能にあります。主に C で使用されますが、特定のコンパイラは C の VLA もサポートしています。このコンテキストでは、int a[n] は int a[10] と同様にスタック上にスペースを割り当てる VLA です。

したがって、上記のコードは可変長 n の VLA を使用します。この機能により、配列バインドが技術的には定数式ではない場合でも、動的に決定されるサイズの配列を作成できます。

以上が定数配列バインドのルールにもかかわらず、この C コードで可変長配列が機能するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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