雖然看似無關緊要,但所提供程式碼中的整數溢位會導致一個重大後果:循環變數的值被破壞。
此處觀察到的行為源自於有符號整數溢位所導致的未定義行為,如 C 11 草案 N3337所述:
「如果在表達式求值期間,結果未在數學上定義或不在其類型的
可表示值的範圍內,行為未定義。」
有了這種未定義的行為,任何事情都可能發生,渲染分析為什麼會發生這種行為在C 規則下毫無意義。
程式碼的彙編清單揭示了導致溢位的明確加法,從而有效地將循環變成了無限循環。此行為是由於出於最佳化目的而假設 i 小於或等於 2,基於大於 2 的值存在未定義行為。因此,循環條件被視為始終為 true。
為了糾正這個問題並確保正確執行,至關重要的是透過修改條件以確保其終止來消除未定義的行為
以上是為什麼有符號整數溢位會導致此 C 程式碼中的無限循環?的詳細內容。更多資訊請關注PHP中文網其他相關文章!