有個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