2016-11-08 47 views
-1

我有很多與GCC編譯器優化級別有關的問題。有時我的C例程的行爲在將編譯級別設置得更高時會發生顯着變化,並且它們不能按預期工作。 GCC編譯器是Atollic TrueStudio IDE的一部分。如何在改變編譯器優化級別(C編程)後保護不可預知行爲的功能?

有沒有人可以給我這個話題的建議?解決這類問題的通用方法是什麼?

我很抱歉,如果我不是100%準確。

+2

你能發表一個例子嗎?如果您正在編寫可移植代碼,則優化應該也不會改變代碼的行爲。唯一發生的情況是,如果GCC優化器中存在錯誤,或者您正在編寫非標準的C代碼。 –

+2

將警告設置爲最大值,讀取它們並在無法調試時使用printf。您的代碼可能存在像未初始化的變量一樣的問題... –

+3

您的代碼中存在錯誤,或者優化器中存在錯誤。發佈您的代碼,以便我們可以確定它們中的哪一個。 –

回答

7

編寫更好的代碼。正確的代碼不會改變不同優化級別的行爲。

避免:

  • 未定義行爲。這不需要提及,但它非常重要,因爲GCC經常使用「代碼不觸發UD」的假設來推動優化。
  • 實現指定的行爲。這些可能會因不同的優化標誌而改變也許不是太常見,但我認爲它可能會發生。

使用編譯器警告,短消息和其他靜態分析工具來幫助您查找代碼中的錯誤(或者,當然,還可以調試打開優化時看到的問題)。