const int による配列サイズの初期化のとらえどころのないジレンマ
C の領域では、配列サイズの初期化に定数を使用すると、多くの場合問題が発生します。不可解なジレンマ。状況によっては、この実践がシームレスに許可される一方で、不可解なコンパイル エラーが発生する状況もあります。
次のコード スニペットを考えてみましょう。
<code class="cpp">const int size = 2; int array[size] = {0};</code>
この例では、コンパイラは、サイズは定数変数「size」で指定します。その理由は、「size」の初期化式の性質にあります。これは定数式であり、コンパイル時に完全に評価できることを意味します。これにより、コンパイラはコンパイル中に配列の正確なサイズを決定できるようになり、それに応じてメモリ割り当てが容易になります。
上記とは対照的に、次のスニペットを見てください:
<code class="cpp">int a = 2; const int size = a; int array[size] = {0};</code>
ここでは、コンパイラが「コンパイルエラー」を嘆いて適合をスローします。問題の核心は、「size」を初期化するために使用される式にあります。これには非定数変数 (「a」) が含まれます。これにより、式が非定数式の領域に追いやられます。その結果、コンパイラはコンパイル時に配列のサイズを確認できなくなります。
この動作は、C 標準委員会による基本的な決定に起因します。委員会は柔軟性よりも単純さと明示性を優先しました。後者を実装するには、「const int size = a;」のような変更不可能な式を区別する複雑なフロー分析が必要になります。 「const int size = foo();」のような真に非定数式も含まれます。このような複雑さは望ましくないと考えられました。
したがって、配列のサイズは定数式を使用してのみ初期化できるという規則が残ります。これにより、コンパイラが配列のサイズを明確に決定できるようになり、予測可能なメモリ割り当てとスムーズなコンパイルが保証されます。配列サイズの初期化の世界に足を踏み入れるときは、常にこの原則を念頭に置いてください。
以上がC で「const int」変数を使用して配列サイズを初期化できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。