我正在使用Visual Studio 2017,需要创建与VS2008兼容的代码(C ++ 03或C ++ 98)。是否可以将MSVC限制为C ++ 03功能?
我正在使用CMake并尝试设置
set_property(TARGET tgt PROPERTY CXX_STANDARD 98)
但这似乎只能确保编译器支持C ++ 98或更高版本。
任何检查C ++代码是否使用比VS2008支持的功能都新的功能的解决方案也可以使用。我只需要确保不会意外使用太新的功能即可。
答案 0 :(得分:2)
MSVC仅在VS2015的更新之一(确切地说是Update 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的同时,您的代码可以在旧版工具集上进行编译。