MSVC现在可以正确地报告

MSVC编译器对 __cplusplus 在Visual Studio 2017版本15.7 Preview 3中,预定义宏提前了20年。此宏一直保持在“199711L”的值,这表示(错误!)编译器符合C++ 98标准。既然 我们的补习工作快结束了 我们正在更新 __cplusplus 宏观来反映我们执行的真实状态。价值 __cplusplus 宏并不意味着我们不再有任何一致性错误。只是新值比总是报告“199711L”要准确得多。

null

/Zc:uuu cplusplus公司

您需要使用 /Zc:__cplusplus 切换以查看 __cplusplus 宏。我们尝试在默认情况下更新宏,发现在更改 __cplusplus . 我们将继续要求使用 /Zc:__cplusplus 切换19.xx系列中所有次要版本的MSVC。

报告的版本 __cplusplus 宏还取决于使用的标准版本开关。如果你正在编译C++ 14模式,宏将被设置为“201402L”。如果你用C++ 17模式编译,宏将被设置为“201703L”。以及 这个 /std:c++latest 转换 ,用于启用当前正在开发的标准中的功能,设置一个大于当前标准的值。此图表显示 __cplusplus 具有不同开关组合的宏:

/Zc:uuu cplusplus开关 /std:c++ 转换 __cplusplus值
Zc:__cplusplus 当前默认为C++ 14 201402L公司
Zc:__cplusplus /std:c++14 201402L公司
Zc:__cplusplus /std:c++17 201703L型
Zc:__cplusplus /std:c++latest 201704L型
Zc:__cplusplus- (已禁用) 任何价值 199711升
Zc:__cplusplus 未指定 任何价值 199711升

注意,MSVC编译器不支持,也永远不会支持C++ 11、C++ 03或C++ 98标准版本切换。还有 __cplusplus 宏不受 /permissive-开关 .

我们正在更新IntelliSense以正确反映 __cplusplus 用MSVC编译时。我们希望IntelliSense在15.7的下一个预览版中是正确的。

_理学硕士

为了更细粒度地检测MSVC工具集中的更改,您可以 继续使用 _MSC_VER 预定义宏 . 我们已经在Visual Studio 2017中的每个工具集更新中更新了此内置宏的值,并将继续这样做。

这个 _MSVC_LANG 预定义宏 继续报告标准版本切换,而不考虑 /Zc:__cplusplus . _MSVC_LANG 是否设置 /Zc:__cplusplus 选项已启用。什么时候? /Zc:__cplusplus 已启用, __cplusplus == _MSVC_LANG .

请在代码中查找用法

我们已经多次听到开发商的消息 当我们接近完全一致性时,我们需要更新这个宏的值。现在我们需要你的帮助。我们试图定义 __cplusplus 默认情况下是正确的,但发现许多代码希望MSVC总是将宏设置为“199711L”。

请花点时间搜索您的代码以查找 __cplusplus 并用 /Zc:__cplusplus 开关已启用。您的代码可能正在使用此宏来确定它是用MSVC编译还是在MSVC仿真模式下使用Clang编译。如果你的代码库真的很旧,它可能会使用这个宏来确定你是否在使用VC++6.0!在启用此开关的情况下花点时间编译。我们需要生态系统向前发展 __cplusplus 默认情况下准确。

最后

一如既往,我们欢迎您的反馈。我们可以通过下面的评论或电子邮件联系我们( visualcpp@microsoft.com ).

如果您在Visual Studio 2017中遇到MSVC的其他问题,请联系我们 帮助>报告产品中的问题 ,或通过 开发者社区 . 把你的建议告诉我们 用户语音 . 你也可以在Twitter上找到我们( @视觉 )还有Facebook( msftvisualcpp软件 ).

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享