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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-25 09:07:29292ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。