c++ - Visual Studio 2010 中是否有编译器设置以确保可移植C++ 的编写?

标签 c++ visual-studio-2010 visual-studio compiler-errors portability

我从使用 Visual Studio 2010 进行编译的开发人员那里收到 C++ 源代码,然后我需要在各种不同的编译器下重新编译:GCC、LLVM、其他版本的 Visual Studio 等。有时他发送给我的代码 (在 VS2010 中编译时没有警告)在其他编译器下编译失败。

是否有任何他可以在 VS2010 中设置的编译器设置来增加他的代码干净可移植的可能性?

最佳答案

在语言层面,没有 Elixir 。您能做的最好的事情就是尽可能地遵守语言标准。如果您利用特定于特定编译器的扩展,大多数编译器都可以选择发出警告或错误(对于 Visual C++,/Za 将禁用非标准语言扩展)。但这并不完美,因为还没有编译器绝对 100% 地实现标准,因此即使使用严格兼容的代码,您仍然会遇到可移植性问题。

另请注意,许多日常代码实际上利用了扩展或未定义或编译器定义的行为,但通常没有意识到,因此以完全符合标准的模式进行编译可能不切实际。

您还必须了解标准允许的不同之处。例如,像 int 这样的类型在不同的系统上可能有不同的大小。 Windows 是 LLP64,而大多数 Unix 派生的操作系统是 LP64。

在系统级别,我不知道有什么完美的方法可以确保程序员不依赖于系统特定的东西(例如 <windows.h><pthreads.h>)。

最好的办法是让所有开发人员都能轻松地在所有目标平台上运行测试构建。

关于c++ - Visual Studio 2010 中是否有编译器设置以确保可移植C++ 的编写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15436520/

相关文章:

visual-studio - 尝试开源安全数据库时出现"The selected file is not a valid solution file"错误

c++ - 将 .ui 文件链接到 C++

c++ - 平面水平旋转

c++ - 0x00000000 访问冲突使用 SDL_image 库加载 PNG 文件

visual-studio - 配置 IIS Express 以供外部访问 VS2010 项目

asp.net - 可以将 Web 服务中定义的常量暴露给消费客户端(.Net 双方)

c++ - 通过迭代器更改对象

c++ - std::filesystem::copy() 和 std::filesystem::copy_file() 有什么区别?

visual-studio-2010 - Visual Studio 代码段上下文?

c++ - MSVCR100D.DLL 和 dependency walker