同一段代碼,為什麼有的編譯器能編譯通過,有的不能?
01-02
同一個Qt工程,為什麼我用MinGW編譯器能編譯通過,MSVC編譯器就會出現錯誤?我該學習具體哪方面的知識(比較好的書推薦)才能理解明白?
VC++的編譯器是微軟的,而MinGW的編譯器是移植的GCC,雖然名義上都是遵守C++標準的,但是在實現細節上有很多差異。
makefile是不同的,編譯預處理宏也有差異,另外stl也是兩套不同的實現。
這種問題基本沒有什麼書會專門講,主要靠工程實踐中去積累經驗,google下或者stackoverflow上有沒有人遇到類似的問題。
深入學習C++,另外學一點編譯原理會有所幫助。
積累些應付不同編譯器特性的經驗是很有用的,我直到現在還偶爾遇到這種問題,我的項目需要在VC++, GCC和clang下都能編譯。你要知道這個世界上是不存在完全符合標準的編譯器的,各個編譯器製造商都會往裡加各種各樣的私貨
一是缺庫缺頭文件
二是編譯器的標準執行有差異,GCC是嚴格按照C++標準來檢查語法的,MSVC就比較「人性化」的容忍很多「慣常錯誤」,還貼心的給你製造了一些「錯誤」的STL介面讓你用起來很爽(比方說map的erase微軟STL是有返回值的)。這就是學院派和工業派的區別。ABI問題,去下載一個msvc版的qt庫。
推薦閱讀:
※有什麼很好的軟體是用 Qt 編寫的?
※沒有Linux cpp後台開發經驗的應屆生如何找到一份Linux cpp後台開發的工作?
※如何實現快速將 64 位二進位(存在字元串里)轉換為十進位?
※C++ 如何跨平台判斷操作系統是32位還是64位?
※在鏈表中應該用哪種智能指針比較合理?