VC6 VS2003編譯器優化造成的bug

2021-05-11 13:38:42 字數 624 閱讀 5728

昨天在csdn上面看到這樣一貼,居然爆料vc6/vs2003有乙個嚴重的bug,於是自己也仔細研究一番:

2、出錯**:

3、原因分析

當我在使用ide環境選擇release生成後,確實發現有上述問題

於是我修改他的**,狼兄弟建議我先看看此時i的十進位制數值與十六進製制數值:

在命令列編譯引數中新增/fa即可得到彙編**(當前目錄中hello.asm):

檢視release生成後在彙編**:

可以驚奇的發現i <0會被優化成0x800b5514 <0x00407d14,於是乎讓我想起前面編譯器優化引數的三個選項,開啟ide的編譯選項:

3、解決辦法:

這是由於編譯器引數優化造成的,具體影響結果的引數是/o2(**速度最快),如果使用/od(不使用優化)則不會出現上述結果,測試如下圖:

在此,十分感謝寂寞的狼、iceboy等友友的耐心的指導與無私的幫助!

VC編譯器與GCC編譯器的區別

今天無意寫了一段 發現了vc編譯器與gun的gcc編譯器還是存在區別的。畢竟gcc支援的是標準c。include struct node int main 上述 在gcc下是編譯失敗的,提示的錯誤 uknown typename node 但是放到vc編譯器下則順利編譯通過。於是按照標準c寫了另外乙...

關於VC6 0 和其他VS編譯器

最近想寫一些 mfc應用程式,在發布的時候遇到了幾個問題,從中得到了一點體會,與大家分享一下。遇到的幾方面問題的起因 1.自己用vs 剛換win7 編譯好的程式在其他人那裡無法執行,提示缺少 mfc庫 2.上面的問題好解決,用靜態 mfc方式重新發布,卻發現原本 200多 k的程式變成了 1m多。3...

優化編譯器的發展

1.19世紀50年代,ibm的backus領導開發了fortran語言及相應的編譯器,這個專案是編譯器發展中的乙個重要里程碑。這個編譯器生成的 與機器語言程式設計師所寫的 相當。遍 pass或phase 的概念就是在這個專案中引入的。backus認為編譯器的轉化可以理解為是消除,這個專案中使用了迴圈...