我從使用Visual Studio 2010進行編譯的開發人員那裏接收C++源代碼,然後我需要在各種不同的編譯器下進行重新編譯:GCC,LLVM,Visual Studio的其他版本等。有時,他向我發送的代碼在VS2010中編譯時不會出現警告)無法在其他編譯器下編譯。Visual Studio 2010中是否存在編譯器設置以確保編寫可移植的C++?
是否有任何編譯器設置,他可以在VS2010中設置以增加他的代碼可以乾淨地移植的可能性?
我從使用Visual Studio 2010進行編譯的開發人員那裏接收C++源代碼,然後我需要在各種不同的編譯器下進行重新編譯:GCC,LLVM,Visual Studio的其他版本等。有時,他向我發送的代碼在VS2010中編譯時不會出現警告)無法在其他編譯器下編譯。Visual Studio 2010中是否存在編譯器設置以確保編寫可移植的C++?
是否有任何編譯器設置,他可以在VS2010中設置以增加他的代碼可以乾淨地移植的可能性?
在語言層面上,沒有銀彈。你所能做的最好的就是儘可能地遵守語言標準。如果利用特定編譯器特有的擴展(使用Visual C++,/Za
將禁用非標準語言擴展),大多數編譯器都可以選擇發出警告或錯誤。但這並不完美,因爲沒有編譯器實現絕對100%的標準,所以即使使用嚴格符合的代碼,仍然可能存在可移植性問題。另外請注意,大量的日常代碼實際上利用了擴展或未定義的或編譯器定義的行爲,通常沒有意識到它,所以在完全符合標準的模式下編譯可能不切合實際。
您還必須瞭解標準允許的不同之處。例如,像int這樣的類型在不同的系統上可能是不同的大小。 Windows是LLP64,而大多數Unix派生的操作系統是LP64。
在系統層面上,我不知道確保程序員不依賴於特定系統(例如,<windows.h>
或<pthreads.h>
)的完美方法。
最好的辦法是讓所有開發者都能在所有目標平臺上運行測試版本。
http://stackoverflow.com/questions/5060034/vs2010-c-and-c-enforce-ansi-compliance-for-linux-gcc-compatibility – 2013-03-15 15:46:53
這是一種方法。另一種方法是讓他除了VS之外還使用g ++編譯所有的東西。 – NPE 2013-03-15 15:51:17
@roger謝謝,這正是我正在尋找的。 – Rich 2013-03-15 17:08:19