2010-11-02 39 views
4

我想生成兼容C++的交叉編譯代碼。我製作了一些有點「異國情調」的代碼,將C++語言推向了灰色,怪異,神祕的領域。Mingw上的C/C++代碼編譯保證與GCC完全兼容(在linux和Mac上)

考慮我的代碼只依賴於升壓和STL,這個問題是檢查代碼的兼容性,而不是LIB兼容性:

請問我的代碼編譯都MSVC和MinGW確保了100%,我的代碼兼容在每個平臺上都有GCC?

+1

「每個平臺」是什麼意思?有很多很多平臺存在,甚至更陳舊。你應該瞄準他們的一部分,並在那裏做你的測試。只有這樣你才能確定你的代碼是混合平臺兼容的。 – darioo 2010-11-02 20:48:47

+0

「平臺」,我的意思是「目標處理器」。我的猜測是,GCC編譯的方式在給定的指令集上是相同的,獨立於操作系統。 – uzul 2010-11-02 20:53:36

+0

灰色地帶沒有這樣的東西。它要麼定義得很好(在這種情況下,它將跨平臺)。或者它是實現定義的(在這種情況下,請閱讀編譯器文檔瞭解其含義)或者它是未定義的(這意味着行爲可能會通過提高優化級別而改變)。如果你有未定義的行爲,你甚至不能保證構建之間的相同行爲,所以它肯定不是灰色,而只是純黑色。你可能會爭辯說,定義的實現是灰色的,但是這些都是有據可查的,你應該知道它何時發生(因爲編譯器會發出警告)。 – 2010-11-02 20:54:10

回答

3

一點都沒有。

使用MSVC和MinGW編譯您的代碼可以確保您的代碼與Microsoft的C/C++庫兼容。我知道你只是在談論代碼兼容性,但這樣的事情不存在。如果您將C++推入灰色地帶,很可能相同的代碼將根據您編譯的平臺而有不同的結果。

保證完全兼容性的最好的唯一方法是在兩個平臺上編譯和測試它。

雖然使用GCC與-std=c++0X -Wall -Wextra -pedantic(或任何其他標準版本)並擺脫所有警告將提供一個相當不錯的代碼質量的想法。

0

老實說?爲了保證你的代碼將在任何平臺上與GCC編譯是不可能的。總有那種可能性,特別是如果你正在使用你的代碼做「異乎尋常的」事情。

0

你也可以嘗試使用cygwin編譯,這將更好地瞭解它將如何構建在更類Unix系統上(雖然它仍然不能保證在所有系統上都能正常工作,但它不僅僅是嘗試msvc和MingW這兩個都只是Windows編譯器)。