C++|VS2019: 进一步新增了C++代码分析规则


C++|VS2019: 进一步新增了C++代码分析规则
文章图片
C++|VS2019: 进一步新增了C++代码分析规则
文章图片
C++|VS2019: 进一步新增了C++代码分析规则
文章图片
C++|VS2019: 进一步新增了C++代码分析规则
文章图片
C++|VS2019: 进一步新增了C++代码分析规则
文章图片
C++|VS2019: 进一步新增了C++代码分析规则
文章图片
C++|VS2019: 进一步新增了C++代码分析规则
文章图片
C++|VS2019: 进一步新增了C++代码分析规则
文章图片
C++|VS2019: 进一步新增了C++代码分析规则
官宣在Visual Studio v16.8 Preview 3中 , 我们添加了一些新的安全编码规则到C++ Code Analysis中 , 开发者可以借助这些规则来发现一些比较常见的编码错误 , 这些错误看起来会不起眼 , 但是由此引发的Bug却十分难以追踪 。 这些编码规则都来自于真实运行的软件产品 , 在微软 , 每个项目都会执行这些编码规则检查 , 以确保软代码满足安全性和标准一致性的要求 。
在之前的文章中 , 我们已经介绍了一些关于VARIANT的规则 , 包括VARIANT , VARIANTARG和PROPVARIANT等 。
今天的文章将作为之前文章的一个延续 , 我们会介绍新的编码规则 , 主要是关于”枚举作为索引的用法”和”使用布尔值来作为HRESULT”这两种使用场景 。
为了方便导入这些规则 , 我们创建了两个新的代码分析扩展 , 分别是EnumIndex和HResultCheck , 它们可以用来检查上面提到的两个编码规则 。
那么 , 我们开始吧 。
使用枚举作为索引枚举 , 可以看作是用户自定义的一个整数类型 , 它包含一个命名的整数常量集合 。 通常 , 我们也叫它为枚举常量 。 枚举主要使用在需要描述一段范围值的场景 。
枚举的定义以一个enum关键字开始 , 后面可以接class或者struct关键字 , 如下所示:
enum class Suit { Diamonds Hearts Clubs Spades ;
我们也可以不加上class或者struct , 这样的枚举称之为”Unscoped枚举” 。
如果使用/std:c++17编译选项 , 则一个枚举可以使用一个显式的底层类型或者没有枚举器的形式来进行定义 , 由此可以引入一种新的 , 不能和其他类型进行隐式类型准换的整数类型 。
Unscoped枚举可以被隐式转换为int类型 , 而Scoped枚举则不能被隐式转换为int , 只能使用强制类型转换才能实现 。 类似的 , 一个int也只能通过强制类型转换来转为一个Scoped或者Unscoped枚举 。
【C++|VS2019: 进一步新增了C++代码分析规则】枚举是整数类型 , 通常包含一组有限的命名常量 , 可以将其隐式或显式转换为int , 这一事实使得使用枚举数作为索引值非常普遍 。 例如下面的例子: