首頁 > 後端開發 > C++ > 主體

為什麼 `i = i` 會導致 C 中未定義的行為?

Patricia Arquette
發布: 2024-10-25 09:07:29
原創
369 人瀏覽過

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>
登入後複製

在前兩種情況下,i 的最終值為 4。然而,在第三種情況下,i 的最終值將是 3。

因此,假設 i 的最終值總是 4 是不正確的。實際行為是未定義的並且取決於編譯器。

作為一般規則,最好避免未定義的行為。如果您遇到表現出未定義行為的程式碼,請務必盡快修復它。

以上是為什麼 `i = i` 會導致 C 中未定義的行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板