C++|VS2019: 进一步新增了C++代码分析规则( 三 )
这就是为什么已有禁止这种滥用的规则的原因 。考虑以下示例:
foo()函数的目的是比较两个值 , 并在它们相等时返回S_OK 。但是 , 如果值相等 , 它将返回S_FALSE , 如果值不同 , 则返回S_OK 。这与预期的行为完全相反 。但是 , 此代码可能会编译得很好 , 而不会收到有关此潜在缺陷的警告 。幸运的是 , C++代码分析可以检测到此情况 , 并将报告C6216警告 , 这是有关将布尔值隐式转换为HRESULT的常规警告 。
在布尔值和HRESULT值的各种潜在滥用中 , 我们了解到 , 一种特定情况比其他情况更常发生 , 并导致更明显的错误 。我们创建了一个额外的扩展来解决这种情况 – HResultCheck 。
HResult规则HResultCheck扩展发现从函数以HRESULT值返回C样式BOOL FALSE的情况 , 导致在意图可能返回失败结果时返回S_OK:
> C33020:检测到错误的HRESULT用法 。
> C33022:检测到可能不正确的HRESULT用法(低置信度) 。
C33020规则这是一个高置信度警告 , 指示HRESULT返回函数返回FALSE 。在许多情况下 , 开发人员将FALSE视为失败值 , 并从函数中返回它以指示失败 。但是 , FALSE的值为0 。 当解释为HRESULT值时 , 该值变为S_OK , 表示成功 。
这是一个简化的示例:
可以固定返回正确的HRESULT值:
C33022警告如果返回最终结果的行上某处存在FALSE , 则对于返回HRESULT的函数 , 这是低置信度警告 。
这是一个简化的示例:
可以固定返回正确的HRESULT值:
在Visual Studio中启用HResult规则可以通过为项目选择不同的规则集 , 在Visual Studio中启用HResult规则 , 如下所示:
最后Microsoft Visual C++团队的博客是我非常喜欢的博客之一 , 里面有很多关于Visual C++的知识和最新开发进展 。 大浪淘沙 , 如果你对Visual C++这门古老的技术还是那么感兴趣 , 则可以经常去他们那(或者我这)逛逛 。
本文来自:《Even More New Safety Rules in C++ Code Analysis》
推荐阅读
- 为什么我喜欢C语言,却非常讨厌C++?一位国外程序员的回答
- 汽车|四部委联合发布通知 进一步完善新能源汽车推广应用财政补贴
- 解决方案|佳能小泽秀树:“笑脸”只是开始,将进一步加强在华研发
- 大一有考研计算机专业的打算,该学习C++还是Java
- 菜鸟学编程,不懂C++ this指针?还不赶快来学一学
- 服装|三人行∣虎门服装产业如何进一步发展?专家这样说
- Chrome开始完善隐私沙盒功能:进一步去第三方cookies
- iPhone 13屏幕刘海将进一步缩小,LG 将为特斯拉供应新电池
- C/C++协程学习笔记丨C/C++实现协程及原理分析视频
- 第一章 1.4 信号,槽和元对象
