C では、定数整数を使用して配列サイズを指定できます。ただし、次の例で示すように、この柔軟性には制限があります。
<code class="cpp">const int size = 2; int array[size] = {0}; // Allowed</code>
<code class="cpp">int a = 2; const int size = a; int array[size] = {0}; // Compile Error</code>
最初の例はコンパイルに成功するのに、2 番目の例は失敗するのはなぜですか?
C 標準では、サイズの初期化に使用される式の性質に基づいて、これらの配列サイズの制限が規定されています。
最初の例では、const int size = 2; size の値はコンパイル時にわかっているため、 は定数式です。コンパイラは配列サイズを知っているため、コンパイル中に必要なメモリを割り当てることができます。
2 番目の例では、const int size = a; a の値は実行時まで決定されないため、 は定数式ではありません。これにより、コンパイラはコンパイル中に配列サイズを認識できなくなり、コンパイル時にメモリを割り当てることができなくなります。
2 番目の例では、サイズが事実上一定値のままであることに注意してください。ですが、これはコンパイラでは考慮されません。ルールは、使用される式のタイプと int a = 2; に焦点を当てます。可変変数を使用するため、非定数式になります。
コンパイル時の割り当てのために実行時の初期化を許可するには、フロー分析が必要になります。コンパイラーは、
<code class="cpp">int a = 2; const int size = a;</code>
と
<code class="cpp">int a = foo(); const int size = a;</code>
のような式を区別する必要があります。サイズ式は同じですが、実際の値は実行時の動作によって異なります。この複雑さは C 委員会によって不必要であると見なされます。
以上がC の `const int` 変数を使用して配列サイズを初期化できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。