c++ - 如何使用 VS2017 编译旧的 C++ 标准?

标签 c++ cmake visual-studio-2017 c++98

我正在使用 Visual Studio 2017,需要创建与 VS2008(C++03 或 C++98)兼容的代码。是否有限制 MSVC 到 C++03 功能的开关?

我正在使用 CMake 并尝试设置

set_property(TARGET tgt PROPERTY CXX_STANDARD 98)

但这似乎只是为了确保编译器支持 C++98 或更新版本。

任何检查 C++ 代码是否使用比 VS2008 支持的功能更新的功能的解决方案都可以正常工作。我只需要确保我不会不小心使用太新的功能。

最佳答案

MSVC 仅在 VS2015 的更新之一(确切地说是更新 3)中获得了标准开关,它或多或少符合 C++14,因此只有以 C++14 开头的标准开关(加上更新时已经实现的一些后续功能)。所有较旧的功能都无条件地启用以实现向后兼容性(并且由于为以前的标准改造已经实现的功能所需的所有工作几乎没有任何好处)。

有关详细信息,请参阅此博客文章:https://devblogs.microsoft.com/cppblog/standards-version-switches-in-the-compiler/

另外,请注意,较新版本的 MSVC 中有很多一致性改进,因此即使使用 std 开关,您也可以编写在旧编译器上无法运行或表现不同的代码。

更好的解决方案是使用 VS2017 visual studio 中的 VS2008 工具集,如下所述:https://devblogs.microsoft.com/cppblog/stuck-on-an-older-toolset-version-move-to-visual-studio-2015-without-upgrading-your-toolset/

这样您就可以确定您的代码在旧工具集上编译,同时使用最新的 IDE。

关于c++ - 如何使用 VS2017 编译旧的 C++ 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56339569/

相关文章:

c++ - 不存在从到 * 的合适转换

c++ - 使用 CMake 对 boost::iostreams::mapped_file_source::init() 的 undefined reference

c++ - 如何在 Xcode 上的 C++ 命令行应用程序中获取进程信息

c++ - 实现深拷贝

android-studio - Android Studio 中的 CMake 语法高亮和助手

c++ - 隐藏自动生成的 CTest 目标

git - 我应该在 Visual Studio 解决方案中包含 gitignore 文件吗?

c# - 在任何项目上发布错误

.net-core - 如何在 Visual Studio 2017 中包含 .Net Core 2.0

c++ - 超出内存或无效内存引用 - C++ 错误