一,問題描述
? ? ? ? 程序中代碼有的執行,有的不執行,仔細研究,查詢人工智能。
? ? ??
程序中printf打印后面的代碼不執行,?然后過幾十個函數又開始正常了。
二.分析問題
? ? ? ?跳過函數一般又判斷和Goto等語句,其它的溢出和錯誤編譯器會報錯,而這個編譯器并沒有報錯,那么怎么回事呢?
三.解決辦法
? ? 將代碼優化等級降低,代碼優化等級高導致的部分函數無法正確執行,我覺得這是個bug。
?將圖中optimization選項改成default或者Level 0即可解決,優化太高導致。
四,總結
- 優化等級0(O0)是開發調試的“安全區”,以犧牲性能為代價換取調試友好性。
- 優化等級2(O2)是性能優化的“競技場”,需在調試困難和代碼效率之間權衡。
- 最佳實踐:
- 開發階段使用O0,確保問題可復現、可定位。
- 發布階段使用O2,結合
volatile
和#pragma
等手段平衡優化與調試需求。 - 在嵌入式系統中,針對不同模塊采用混合優化策略。
- 個人建議不要優化,如果你非常熟悉編譯優化,那么你可以使用,如果不熟悉編譯器原理和優化方案最好不要優化。