首頁  >  文章  >  後端開發  >  儘管看似無害的賦值,為什麼我的 C 程式碼會進入無限循環?

儘管看似無害的賦值,為什麼我的 C 程式碼會進入無限循環?

Barbara Streisand
Barbara Streisand原創
2024-11-04 13:58:02405瀏覽

Why Does My C   Code Enter an Infinite Loop Despite a Seemingly Harmless Assignment?

C 中的無限輸出循環

在提供的C 程式碼中,發生意外的無限循環,列印一系列連續的數字( 「0 , 1, 2, 3, 4, 5, ...」)而非預期的「0, 1, 2, 3」。

仔細檢查發現罪魁禍首是看似無害的賦值語句「delta = mc[di]" 在迴圈內。此賦值會觸發未定義的行為,因為它在最後一次迭代時越界存取 mc 陣列(即「di = 4」)。

在積極的循環最佳化下,編譯器可能會假設不存在未定義的行為。結果,它透過消除 di

為了確保正確的行為,避免未定義的行為至關重要,即使在最佳化的程式碼中也是如此。在這種情況下,解決方案是確保在循環內的範圍內存取 mc。

另一種方法是使用 gcc 中的 -fno-aggressive-loop-optimizations 標誌來停用激進的循環最佳化。此標誌強制編譯器保留 di

透過了解未定義行為的潛在後果並採取適當措施避免它,程式設計師可以確保其 C 程式碼的可靠性和正確性。

以上是儘管看似無害的賦值,為什麼我的 C 程式碼會進入無限循環?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn