Visual Studio 2010中有编译器设置来确保编写可移植的c++吗?
Are there compiler settings in Visual Studio 2010 to ensure the writing of portable C++?
我从使用Visual Studio 2010编译的开发人员那里收到c++源代码,然后我需要在各种不同的编译器下重新编译:GCC, LLVM,其他版本的Visual Studio等。有时他发给我的代码(在VS2010中编译时没有警告)在其他编译器下无法编译。
是否有任何编译器设置,他可以在VS2010中设置,以增加他的代码将是干净的可移植的可能性?
在语言层面,没有什么灵丹妙药。你能做的最好的事情就是尽可能地坚持语言标准。如果您利用特定于特定编译器的扩展,大多数编译器都有发出警告或错误的选项(对于Visual c++, /Za
将禁用非标准语言扩展)。但这并不完美,因为还没有编译器实现绝对100%的标准,所以即使是严格符合标准的代码,也可能存在可移植性问题。
还要注意,许多日常代码实际上利用了扩展或未定义的或编译器定义的行为,通常没有意识到这一点,因此在完全符合标准的模式下编译可能是不实际的。
您还必须了解标准允许的不同之处。例如,像int这样的类型在不同的系统上可能有不同的大小。Windows是LLP64,而大多数unix派生的操作系统是LP64。
在系统层面,我不知道一个完美的方法来确保程序员不依赖于特定于系统的东西(例如,<windows.h>
或<pthreads.h>
)。
最好的办法是让所有开发人员都能在所有目标平台上运行测试构建。
相关文章:
- C++Union/Struct位域的实现和可移植性
- 具有Qt事件循环的可移植通用共享库设置
- 没有执行策略的 std::transform_reduce 是可移植的吗?
- 如何在 c++ 中正确指定 #include 路径以使程序可移植
- 创建异构顶点数据数组的可移植方法
- FlatBuffers/Protobuf 中是否有支持任意 24 位有符号整数定义的可移植二进制序列化架构?
- 静态库可移植性
- 从非类型模板参数声明 constexpr 数组的可移植方法
- C++:Unicode 字符串文字的可移植性
- 如何使Visual Studio 2017 C++项目在计算机之间更具可移植性
- 尝试将 sfml 和 c++ 与 Windows 10 上的可移植 vscode 链接起来
- 在C++中获取命名空间名称的任何可移植技巧
- STR这个实现是否安全且可移植?
- 编写 std::copysign 的可移植 SSE/AVX 版本
- 是可移植的包装结构
- 将参数推送到调用堆栈 (C++) 的可移植方法
- 在为视频游戏实施基本的二进制序列化时,请担心可移植性
- 如何以可移植方式删除名称为 wchar_t 类型的文件C++
- Xcode 8.3.2 中的错误警告:文件的非可移植路径 - 指定的路径与磁盘上的文件名不同
- 格式化说明符以可移植地打印 C++11 中的 std::uint64_t 变量