C/C での変数の宣言的初期化 : 驚くべき動作
C/C のよく知られた宣言および初期化構文を使用して、次の初期化を行うことができます。変数は宣言時に使用されます。ただし、初期化対象の変数が初期化式自体に出現する場合、特有の動作が発生します。次のコード スニペットを考えてみましょう。
<code class="cpp">int x = x + 1;</code>
このコードは正常にコンパイルされ、驚くべきことに、実行後に x の値が 1 になります。変数 x は初期化で使用される前に宣言されていないように見えるため、この動作は直観に反しているように見えるかもしれません。
説明: 宣言のポイントと未定義の動作
C では、変数の宣言ポイントは、完全な宣言子 (変数の型と名前) の直後で、初期化子 (存在する場合) の前にあります。したがって、上記のコードでは、等号の位置に x が存在し、それを右側で使用できるようになります。
ただし、変数が静的ストレージ期間で初期化されていない場合に注意することが重要です。 (関数の外側など)、動作は未定義です。これは、初期化前に存在する x が任意の値を持つためです。
C 03 標準では、質問の例のように、独自の (不定の) 値で初期化された変数の動作が指定されています。は未定義です:
int x = x; // Example from the C++03 standard { int x = x; // Undefined behavior }
実際的な意味
この動作は驚くべきかもしれませんが、運用コードでの利用を避けることが重要です。変数が静的ストレージ期間で宣言されていない限り、未定義の動作により予期しない結果やエラーが発生する可能性があります。
ただし、この動作を理解することは、新しく宣言された変数を含む複雑な式を理解する場合や、型破りな初期化を伴うコードを分析する場合に役立つことがわかります。テクニック。
以上が`int x = x 1;` が C/C で機能するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。