在 C 程式碼片段中,循環迭代複數數組並列印它們的索引。然而,它意外地產生了一個無限級數,而不是預期的輸出。
儘管條件檢查 di
4 控制循環終止,這個檢查看起來失敗,導致繼續執行。這個問題是由循環內的賦值語句 delta = mc[di] 引起的,這會導致未定義的行為。 在某些編譯器最佳化下,會做出以下假設:這些假設導致消除 di
要避免此問題,可以使用 -fno-aggressive-loop-optimizations 停用此類最佳化,或確保所有陣列存取都在範圍內。在這種特定情況下,將 cout 語句移出循環會觸發有關未定義行為的警告,有助於識別問題並防止未定義行為。
透過了解未定義行為的含義以及它可能導致的潛在不一致透過積極的編譯器最佳化,開發人員可以確保程式碼的正確行為並避免意外結果。以上是為什麼在使用積極的編譯器最佳化時我的 C 迴圈會無限運行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!