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