定数配列バインド要件にもかかわらず、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 サイトの他の関連記事を参照してください。