VisualStudio 2017中的C++核心检查15.7预览2

这篇文章是由Sergiy Oryekhov写的。

null

C++核心指南检查扩展接收了几个新规则 Visual Studio 2017 15.7预览版2 . 这个迭代的主要焦点是检查,这些检查将使从 指南支持库 .

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

如果您刚刚开始使用本机代码分析工具,请看一下我们的介绍 快速启动:C/C++的代码分析 .

新规则集

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

  • GSL规则

    一些新规则试图帮助捕捉与如何使用跨度和视图类型相关的微妙问题。一旦安全内存处理的现代实践被采用,捕捉这些问题就变得更加重要。此外,还推广了Guidelines支持库中的一些有用的实用程序,以便使用户代码更安全、更统一。

新规则

边界规则

  • C26446使用u GSL u AT此规则建议在调用不执行范围检查的下标运算符时使用更安全版本的索引函数。此规则也是GSL规则集的一部分。

函数规则

  • C26447请勿将u放入u NOEXCEPT此检查适用于标记为“noexcept”的函数,并指向这些函数调用可能引发异常的代码的位置。

GSL规则

  • C26445无跨度参考当遗留代码迁移到指向内存缓冲区的新类型时,可能会出现一些微妙的问题。其中一个问题是跨域或视图的非预期引用,如果遗留代码用于引用向量或字符串等容器,则可能会发生这种情况。
  • C26448最终使用u GSL u指南支持库有一个有用的实用程序,可以帮助以结构化和统一的方式添加“最终操作”功能。此规则有助于找到使用“goto”的位置,并且可能是采用gsl::finally的好候选。
  • C26449临时无跨度跨度和视图在处理内存缓冲区时既高效又安全,但它们从不拥有所指向的数据。尤其是在处理遗留代码时,必须考虑到这一点。用户可能犯的一个危险错误是在临时对象上创建跨度。这是类似于引用本地数据的生存期问题的特例。

    默认情况下,此规则在“本机推荐”规则集中启用。

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

    // Returns a predefined collection. Keeps data alive.gsl::span get_seed_sequence() noexcept;// Returns a generated collection. Doesn’t own new data.const std::vector get_next_sequence(gsl::span);void run_batch(){auto sequence = get_seed_sequence();while (send(sequence)){sequence = get_next_sequence(sequence); // C26449// ...}}
  • C26446使用u GSL u AT参见上面的“边界规则”。

反馈

一如既往,我们欢迎您的反馈。欢迎通过电子邮件发送任何评论 visualcpp@microsoft.com ,通过 推特@ 视觉 ,或Facebook Microsoft Visual Cpp .

如果您在VS 2017中遇到MSVC的其他问题,请通过 报告问题 选项,从安装程序或VisualStudioIDE本身。如需建议,请告知我们 用户语音 . 谢谢您!

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