ホームページ > バックエンド開発 > C++ > `i = i ` が C で未定義の動作を引き起こすのはなぜですか?

`i = i ` が C で未定義の動作を引き起こすのはなぜですか?

Patricia Arquette
リリース: 2024-10-25 09:07:29
オリジナル
397 人が閲覧しました

Why Does `i = i  ` Lead to Undefined Behaviour in C  ?

i = i の未定義の動作

C 標準では、「未定義の動作」を標準で明示的に指定されていない動作として定義しています。これは、コンパイラーが未定義の動作に遭遇した場合、たとえその結果が予測不可能または誤った出力になる場合でも、必要なコードを自由に生成できることを意味します。

未定義の動作の一例は、次のような変数への値の代入です。変更されようとしています。次のコード スニペットを考えてみましょう:

<code class="cpp">i = 3;
i = i++;</code>
ログイン後にコピー

標準によれば、このコードは未定義の動作を引き起こします。ただし、評価の順序に関係なく、i の最終値は 4 になると想定されることがよくあります。これは必ずしも真ではありません。

コンパイラは、次のいずれかと同等のコードを出力する可能性があります:

<code class="cpp">i = 3;
int tmp = i;
++i;
i = tmp;

i = 3;
++i;
i = i - 1;

i = 3;
i = i;
++i;</code>
ログイン後にコピー

最初の 2 つのケースでは、i の最終値は 4 になります。ただし、3 番目のケースでは、i の最終値は 3 になります。

したがって、i の最終値が常に 4 になると仮定するのは誤りです。実際の動作は未定義であり、コンパイラに依存します。

一般的なルールとして、未定義の動作は避けることが最善です。未定義の動作を示すコードに遭遇した場合は、できるだけ早く修正することが重要です。

以上が`i = i ` が C で未定義の動作を引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート