輕鬆搞死VS2008的C++編譯器

有個VS2005的VC++工程可以正常編譯,轉換到VS2008下編譯,編譯器出錯崩潰了,錯誤提示大概如下:

error PRJ0002 : 錯誤的結果 1 (從“C:/Program Files/Microsoft Visual Studio 9.0/VC/bin/cl.exe”返回)

 

剛開始很莫名其妙,後來追蹤到編譯器崩潰前編譯的最後一個源文件,

經過逐一註釋文件中的代碼段,終於發現,只要出現下面這樣的語句,就可以令VS2008的C++編譯器崩潰:

fprintf(fp,"%s %d/n","cl.exe會崩潰");   //缺少對應的整型參數導致編譯器cl.exe崩潰

 

我的測試貌似就是這樣的,上面函數多加一個參數他就不會崩潰,額,這個真的很神奇,應該算是編譯器的bug吧

 

【補記】

經過最新測試發現:原來是VC8(VS2005)的項目默認屬性有開/Wp64 (檢測64位可移植性問題),

在VC9(VS2008)下面,如果仍然打開/Wp64編譯選項,那麼遇到上述這種代碼編譯器就會崩潰,

如果在項目屬性裏禁止"檢測64位可移植性問題"(/Wp64 )這個選項,則編譯就可以正常通過,編譯器不會崩潰。

 

總結:VC8的項目轉換到VC9,如果沒有關閉/Wp64編譯選項,那麼如果遇到下面這種語句,編譯器就會崩潰.

fprintf(fp,"%s %d/n","/Wp64打開,cl.exe會崩潰");   //缺少對應的整型參數導致編譯器cl.exe崩潰

 

有圖有真相,崩潰的截圖如下:

 

 

 

轉載:http://blog.csdn.net/baodi_z/article/details/5836891

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章