回答
要開始我們就需要你在(爲MSVC)的版本,你打什麼樣的錯誤(編譯時,鏈接時或運行時)等。
假設你是一個相對較新的版本(MSVC 2008 SP1)和編譯器錯誤被竊聽,我建議如下:
- 你的程序的入口點
main
而不是_tmain
或WinMain
- /W4:警告視爲錯誤
- 刪除所有以
_
開頭的功能 - 它們是具體的實施 - 沒有的Win32 API要麼
- 沒有特定於平臺的線程
- 檢查,如果你有
char
- 相同的符號性如何做這兩種實現治療
wchar_t
- 沒有安全的異常處理或內聯彙編魔法
- 沒有COM/MFC要麼
我的問題不是msvc中的錯誤,問題是msvc讓太多的東西滑動,而gcc更嚴格 – jmasterx 2010-09-08 00:19:40
@Milo:上面的列表是可能導致悲傷的指示。沒有任何來自你身邊的例子,你的問題就很難回答。 – dirkgently 2010-09-08 00:23:56
一個更好的問題是:MSVC,g ++或任何其他編譯器標準兼容,如果是,則是相同的標準版本?你不應該依賴於一套常見的非標準行爲。就我個人而言,我負責在g ++ 4.1.x和VC7.1上編譯超過500KLOC的C++。這兩種編譯器都可以有很多的支持。
這兩種編譯器都有語言或庫擴展。 g ++傾向於將庫擴展放在單獨的名稱空間中。 VC,至少老版本,不太好。兩者都具有默認打開的語言擴展,或者可以通過編譯器開關啓用(或禁用)語言擴展。你最好禁用所有的語言擴展。
您可以設置的每個編譯器的警告級別越高越好 - 並且不要忽視來自任一編譯器的警告,而無需理由。
對於Windows,默認情況下,我使用以下選項:/W3 /wd4355 /wd4805 /wd4710
。我想使用/W4
,但第三方庫使這個級別難以承受。 對於g ++,我使用-Wall -Wextra
。我也想使用-Wold-style-cast
,但是我依賴太多違反這個的第三方庫。
每個編譯器都會針對不同的結構發出警告,或者對它們提出不同的警告。您最好注意兩個編譯器的輸出,並找到它們之間的代碼子集,它們可以產生零個警告,儘可能高的警告級別。
+1。您可以設置幾個選項,這些選項將有所幫助,但是在一天結束時,無法用兩個編譯器定期構建項目。我一直在使用g ++和Visual Studio每天構建相同的代碼5年以上,除了std :: tr1怪癖和使用'typename'之類的東西之外,還有很少的東西可以在其中工作,另一個。便攜式書寫,你不應該有問題。 – 2010-09-09 08:22:28
/Za (Disable Language Extensions)選項禁用了許多特定於Microsoft的keywords和extensions。
- 1. Windows GCC和MSVC編譯器之間的編譯時間比較
- 2. MSVC編譯器更新
- 3. MSVC++編譯器錯誤C2892?
- 4. 編譯編譯器錯誤編譯GCC
- 5. 創建(使用MSVC編譯器)
- 6. Boost Spirit v2 gcc編譯錯誤,它不顯示使用msvc
- 7. 使用GCC和MSVC編譯時的不同行爲
- 8. MSVC內聯彙編GCC的
- 9. 如何在Windows編譯器和GCC編譯器中使用SSE?
- 10. 錯誤模板偏特在編譯GCC,但不是MSVC
- 11. 使gcc編譯C使用gcc規則
- 12. GCC VS MSVS編譯器
- 13. Android GCC編譯器更改
- 14. GCC編譯器問題
- 15. GNU GCC編譯器更新
- 16. GCC編譯器錯誤
- 17. 找不到gcc編譯器
- 18. Eclipse Juno - GCC編譯器pthread
- 19. OIS GCC編譯器錯誤
- 20. GCC編譯器錯誤
- 21. 舊的gcc編譯器
- 22. 最小GCC C++編譯器
- 23. C89 vs c99 GCC編譯器
- 24. GCC編譯器標誌「-DEVAL」
- 25. GCC編譯器的問題
- 26. MSVC和FreeGlut編譯器錯誤
- 27. MSVC編譯器行爲是用來
- 28. 這是一個MSVC++編譯器錯誤?
- 29. 將編譯器從gcc切換到msvc後Qt應用程序崩潰了
- 30. Boost 1.37爲MSVC預編譯
@Milo - 我會密切關注這個問題。我目前正在將一個巨大的代碼從MSVC移植到GNU工具鏈上,我感覺你很痛苦。 – 2010-09-08 00:01:39
你能提供一些例子嗎?我的印象是,MSVC總是禁止許多完全有效的C語言(至少C99),因爲它們不在C++中,它本質上是一個假裝C是C++子集的C++編譯器... – 2010-09-08 00:09:11
@R:既然他是從MSVC到Linux我不會被C99/C++ 03特定的代碼困擾太多,並且GCC不支持這些代碼(假設使用了最新版本的GCC)。 – dirkgently 2010-09-08 00:11:46