C++核心检查在Visual Studio 2017 预览版 2

[原文发表地址] C++ Core Checks in Visual Studio 2017 15.7 Preview 2

[原文发表时间] 2018/3/22

         C++ 核心准则检查扩展有了几个新的规则在 Visual Studio 2017 预览版2上。这次迭代主要在于检查,这将使从指南支持库中采用实用程序变得更加容易。

        以下是对这些补充的简要总结。 有关更多详细信息,请参阅MSDN上的文档:C++核心指南检查器参考

        如果您刚开始使用本机代码分析工具,请参阅我们的介绍性快速入门:C / C ++代码分析

新的规则集

        在此版本中添加了一个新的规则类别,其中可以在项目设置对话框中选择规则集文件。

  • GSL规则

         一些新的规则试图帮助捕捉有关如何使用跨度和视图类型的细微问题。 一旦现代的安全记忆处理实践得到采用,捕捉这些问题就变得更加重要。 此外,还会推出一些来自指南支持库的有用实用程序,以便使用户代码更安全,更均匀

新规则

界限规则

  • C26446 USE_GSL_AT

        这个规则建议,只要没有执行范围检查的下标运算符被调用,就使用更安全的索引函数版本。

       该规则也是GSL规则集的一部分。

函数规则

  • C26447 DONT_THROW_IN_NOEXCEPT

       此检查适用于标记为“noexcept”的函数,并指向这些函数调用可能会抛出异常的代码的地方。

GSL规则

  • C26445 NO_SPAN_REF

        当遗留代码迁移到指向内存缓冲区的新类型时,可能会发生一些细微问题。其中一个问题是,如果遗留代码用于引用容器(如矢量或字符串等),则可能会发生跨度或视图的意外引用。

  • C26448 USE_GSL_FINALLY

       指导方针支持库有一个有用的实用工具,有助于以结构和统一的方式添加“最终行动”功能。这条规则有助于找到使用'goto'的地方,并且可能是采用gsl :: finally的最佳人选。

  • C26449 NO_SPAN_FROM_TEMPORARY

        跨度和视图在处理内存缓冲区时是高效和安全的,但它们从不拥有它们指向的数据。在处理遗留代码时尤其要考虑到这一点。用户可以犯的一个危险错误是创建一个临时对象的跨度。这是一个类似于引用本地数据的生命期问题的特例。

此规则在“原生推荐”规则集中默认启用。

示例:结果类型的细微差别。

  • C26446 USE_GSL_AT

请参阅上面的“界限规则"。

反馈

        一如既往,我们欢迎您的反馈。 欢迎通过电子邮件visualcpp@microsoft.com

,Twitter @visualc或Microsoft Visual Cpp. 的Facebook发送任何评论。

       如果您在VS 2017中遇到MSVC的其他问题,请通过报告问题选项告诉我们,无论是从安装程序还是Visual Studio IDE本身。 对于建议,请通过UserVoice.告诉我们。 谢谢!