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中文網其他相關文章!