提供されたコードは、整数オーバーフローにより未定義の動作を示します。整数オーバーフローは、算術演算の結果が特定の整数型に格納できる最大値または最小値を超えると発生します。
説明:
この場合、 2 つの 32 ビット整数の積が最大値を超えるため、演算 i*1000000000 では整数オーバーフローが発生します。 32 ビット整数で保存できます。未定義の動作により、次のようなあらゆることが起こる可能性があります。
無限ループ解析:
コンパイラは、オーバーフローに関する警告に基づいてループを最適化します。最適化では、オーバーフローが発生した後、i が 2 以下であると想定します。これは、次の理由により無限ループにつながります。コード動作:
最適化されたコードの終了条件が正しくないため、ループが無限に継続し、4 行を超える出力が生成されます。この誤った動作は、整数オーバーフローによって引き起こされる未定義の動作の結果です。未定義の動作の防止:
未定義の動作を回避するには、開発者は次のことを行う必要があります:以上が整数オーバーフローが C ループで未定義の動作と予期しない数の出力行を引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。