`int i = i;` が未定義の動作でコンパイルされるのはなぜですか?
Nov 11, 2024 am 07:21 AM独自のイニシャライザとして使用される初期化されていない変数の動作
C/C のこのコードは、その動作について疑問を引き起こします。
int i = i;
初期化されていない変数が存在するにもかかわらず、このコードは警告やエラーなしでコンパイルされます。なぜこれが起こるのでしょうか?また、その動作について標準では何と記載されていますか?
不定の値と実装の依存関係
i のような変数を使用してそれ自体を初期化すると、不定の値が含まれています。この値は、未指定の値またはトラップ表現のいずれかになります。未指定の値は標準では定義されておらず、実装に依存します。トラップ表現は、実装でサポートされている場合、使用時に未定義の動作をトリガーします。
パディングによる未定義の動作
実装がパディング ビットを整数型で割り当てている場合、および不定値はトラップ表現であり、それを使用すると未定義の動作が発生します。これは、トラップ表現にアクセスすると予期しない結果が生じるためです。
パディングなしの未指定の値
ただし、実装がパディング ビットを整数で割り当てない場合、不定の値は次のようになります。単に不特定です。この場合、未定義の動作はなく、i の正確な値は実装によって決定されます。
アドレスが取得された場合の未定義の動作
さらに、この動作はC11 標準で述べられているように、アドレスが取得されていない場合でも未定義になります:
"左辺値がレジスタ ストレージ クラスで宣言された可能性がある自動ストレージ期間のオブジェクト (アドレスが取得されたことがない)、そのオブジェクトは初期化されていないため、動作は未定義です。
したがって、このコードの動作は実装です。 -依存性があり、さまざまな要因に応じて未定義になる可能性があります。
以上が`int i = i;` が未定義の動作でコンパイルされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか?

STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか?
