我从使用 Visual Studio 2010 编译的开发人员那里收到 C++ 源代码,然后我需要在各种不同的编译器下重新编译:GCC、LLVM、其他版本的 Visual Studio 等。有时他发送给我的代码(编译时不需要VS2010 中的警告)无法在其他编译器下编译。
他是否可以在 VS2010 中设置任何编译器设置来增加他的代码完全可移植的可能性?
我从使用 Visual Studio 2010 编译的开发人员那里收到 C++ 源代码,然后我需要在各种不同的编译器下重新编译:GCC、LLVM、其他版本的 Visual Studio 等。有时他发送给我的代码(编译时不需要VS2010 中的警告)无法在其他编译器下编译。
他是否可以在 VS2010 中设置任何编译器设置来增加他的代码完全可移植的可能性?
在语言层面,没有灵丹妙药。您能做的最好的事情就是尽可能地遵守语言标准。如果您利用特定于特定编译器的扩展(使用 Visual C++,/Za
将禁用非标准语言扩展),大多数编译器都有发出警告或错误的选项。但这并不完美,因为还没有编译器绝对 100% 地实现该标准,因此即使使用严格兼容的代码,您仍然可能会遇到可移植性问题。
另请注意,许多日常代码实际上利用了扩展或未定义或编译器定义的行为,通常没有意识到这一点,因此在完全符合标准的模式下编译可能不切实际。
您还必须了解标准允许的不同之处。例如,像 int 这样的类型在不同的系统上可能有不同的大小。Windows 是 LLP64,而大多数 Unix 派生的操作系统是 LP64。
在系统级别,我不知道确保程序员不依赖于系统特定的东西(例如,<windows.h>
或<pthreads.h>
)的完美方法。
最好的办法是让所有开发人员都能轻松地在所有目标平台上运行测试构建。