C++|Visual Studio 2022:新的枚举检查规则( 二 )


但是 , 这个检查存在限制 。它仅适用于范围枚举 , 因为编译器会在静态分析阶段之前将常规枚举转换为整数 。我们正在寻找改进代码内部表示的方法 , 以便对代码的编写方式有更高的准确度 , 这将在未来实现更好的诊断 。
C26828规则 C26828 将标记来自不同枚举的值混合的按位表达式 。考虑以下示例:

这里 BitWiseA 和 BitWiseB 具有重叠值 。我们不太可能希望在同一个按位表达式中同时使用两者 。这可能是拼写错误的结果 。
此检查具有与 C26827 类似的限制 。
对 C26812 的改进规则 C26812 建议 , 在旧版枚举上使用新的 C++11 范围枚举 。长期以来 , 此检查一直是我们产品的一部分 , 但仍有改进的余地 。以前 , 它在其使用站点而不是在其声明处诊断遗留枚举 。这有几个问题:
> 我们没有对未使用的枚举发出警告 。
> 不可能在声明中禁止所有出现此警告的情况 , 开发者社区也报告了这个问题 。
> 它不适用于新的 /external 功能 。
> 错误诊断的位置可能远离其声明位置 , 这使得解决警告变得更加困难 。
此检查的新版本将对声明而不是使用发出诊断 。在大多数情况下 , 这应该会改善用户体验 。我们还意识到 , 解决此错误有时代价高昂或根本不可能(例如 , 库可能需要向后兼容) 。为了解决这个问题 , 我们从 NativeRecommendedRules 规则集中删除了这条规则 , 并创建了一个名为 CppCoreCheckEnumRules 的新规则集 , 以包含我们在这篇文章中提到的所有 4 条规则 。
总结即将推出的 Visual Studio 2022 17.2 Preview 3 将提供新的检查功能 , 以发现难以发现的枚举误用问题 。它还将包括对现有检查的一些质量改进 , 可以帮助将代码库迁移到范围枚举 。三个新的与枚举相关的检查是 NativeRecommendedRules 规则集的一部分 , 并且更新的警告已移至 CppCoreCheckEnumRules 。
最后Microsoft Visual C++团队的博客是我非常喜欢的博客之一 , 里面有很多关于Visual C++的知识和最新开发进展 。 大浪淘沙 , 如果你对Visual C++这门古老的技术还是那么感兴趣 , 则可以经常去他们那(或者我这)逛逛 。
本文来自:《New Enumeration Checks in Visual Studio 2022 version 17.2 Preview 3》
【C++|Visual Studio 2022:新的枚举检查规则】