null
这篇文章是由Sergiy Oryekhov写的。
请注意,docs.microsoft.com的某些链接尚未解析。并不是所有的官方文件都是针对这个主题编写的。
Visual Studio 2017 15.6预览版2 包括一组更新到C++核心指南检查扩展。我们添加了更多的检查,以帮助使代码更干净、更安全和可维护。本文档简要介绍了新规则。有关这些规则的更多详细信息以及可用规则的更新列表,请参见:
- VisualStudio 2017中的C++核心检查15.6预览2:整数溢出规则
- VisualStudio 2017中的C++核心检查15.6预览2:生存规则
- C++核心指南检查器引用
此版本还改进了本机代码分析工具的用户体验:
Visual Studio 2017 15.6预览2的C++静态分析改进
新规则集
此版本中引入了两个新的规则类别以及相应的规则集文件,可以在项目配置中选择这些文件来过滤静态分析结果:
- 算术规则 这些规则关注算术运算可能导致数据丢失、未定义行为或溢出的情况。
- 生存期规则 这组规则以前以实验C++核心检查的形式发布(这仍然是可用的)。对于15.6版本,它被完全重写,第一个版本已经准备好进行评估。主要的重点是捕捉非常危险的情况,在这种情况下,代码可以访问由于内容的生存期结束而不再有效的内存位置(例如,局部变量不再在作用域中并且已被销毁)。
新规则
-
班级规则
- C26433明确覆盖 当一个方法重写一个基虚函数时,它应该使用“override”说明符来清楚地说明这一点。
- C26435单u虚拟u规范 方法应该通过使用单个说明符(“virtual”、“override”或“final”)清楚地说明其虚拟行为的类型。
- C26443无u显式u数据或u覆盖 析构函数是非常特殊的方法,它们的指导原则不同于OVERRIDEu显式规则:如果基类有虚拟析构函数,建议依赖隐式重写。
-
申报规则
- C26444无未命名对象 此规则有助于检测一些常见的情况,即创建并立即丢弃可能昂贵的对象。这通常表示调用结果被忽略或资源处理效率低下。
-
算术规则
- C26450算术运算结果可证明有损 对常量进行算术运算有时会导致意外溢出,这些溢出在用户代码中并不明显,但可以通过自动化工具轻松识别。
- C26451算术运算的结果被转换成较大的大小 由于操作顺序和不明显的溢出,转换为更广泛的类型可能无效并导致意外结果。例如,算术运算可能会导致32位整数结果在转换为64位类型之前溢出。
- C26452移位计数为负或太大 如果移位计数不适合左侧操作数类型,则移位整数值可能导致未定义的行为。
- C26453左移位负号 负符号积分的左移有未定义的结果。
- C26454算术运算结果负数无符号 此规则检测减法运算是否导致负数转换为无符号类型,这始终是一个溢出。
-
生存期规则
- C26486生命周期函数前提条件冲突 如果一个指针被传递给一个函数,它应该指向一个有效的内存位置,即一个具有有效对象或nullptr的位置。
- C26487寿命功能后置条件违规 如果指针是从函数返回的,则它必须指向比函数寿命长的有效对象,或者是nullptr。
- C26489生存时间u DEREF u无效u指针 此规则尝试捕捉本地指针获取指向临时对象的值的场景。如果在目标可能不存在的点访问这样的指针,这显然会导致灾难性的结果。
最后
好的工具可以帮助您维护和升级代码。C++核心指南是一个很好的开始,C++核心指南检查器可以帮助您清理代码并保持代码整洁。试用VisualStudio 2017版本15.6中的扩展C++核心指南检查器,让我们知道您的想法。
如果您对我们有任何反馈或建议,请告知我们。我们可以通过以下评论和电子邮件联系到您( visualcpp@microsoft.com )你可以通过 帮助>报告产品中的问题 ,或通过 开发者社区 . 你也可以在Twitter上找到我们( @视觉 )还有Facebook( msftvisualcpp软件 ).
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END