官宣IntelliSense Code Linter for C++

在Visual Studio 2019 v16.6 Preview 2中,我们高兴的宣布一项针对C++开发者的新功能:IntelliSense Code Linter for C++。这项新功能旨在帮助C++开发者在编写代码的时候能快速定位和修正可能存在的代码缺陷。它会在你编写代码的时候,在编辑器中以下划线的方式,实时地的显示代码中存在的问题并给出建议的修改措施。

有图有真相

这项新功能构建在Visual Studio现有的C++ IntelliSense基础之上。

这意味着,代码扫描将比之前的后台代码分析更快,从而更早地给出分析结果。

为了确保IntelliSense组件以尽可能快的速度运行,旧版的linter组件主要关注在那些很容易被发现的问题上。

新版本的linter将作为现有代码分析工具(例如MSVC的后台代码分析或者Clang-Tidy)的一个重要补充,同时可以对复杂的代码场景进行分析处理。

你可以在Visual Studio的[工具-选项]菜单中打开这个预览版功能,如下图所示:

设计目标

当我们考虑要怎么做才能实现出一个比较好的代码分析工具时,我们将如下的几个目标作为Linter的设计目标。

1) 我们希望Linter能尽可能地找出那些让C++开发者感到意外的代码缺陷,尤其是来自其他语言的开发者。通过这样的代码检查,可以使某些C++语言功能的学习曲线变得平滑。

2) 这个工具应该可以提供针对具体问题的建议。就像IntelliSense可以侦测出可能会导致构建失败的语法错误一样,Linter应该可以帮助您在代码构建之前就识别并修复逻辑和运行时错误。

3) Linter应该能找出那些可以被解决的问题。虽然最终这只是代码风格和哲学问题,但总的来说,它们只关注导致实际Bug的代码缺陷。

会进行哪些代码检查

我们根据上面提到的三个设计目标,我们在Preview 2版本中实现了以下的几个代码检查。

Arithmetic Overflow

此代码检查将查找:使用32位数据类型进行算术运算,然后赋值给更宽的类型的情况。将一个32位的变量分配给更宽的类型,可以很好地表明开发者认为变量的值可能超出32位类型的范围。在C++中,表达式将被认为32位的,这可能会算术溢出,然后将溢出后的值赋值给更宽的类型变量。

Integer Division Assigned to Floating Point

此代码检查将查找:将整数除法的结果赋值给一个浮点数的情况。将一个表达式赋值给一个浮点类型,可以很好地表明开发者想要结果的小数部分。在C++中,会先对整数除法求值,并且在将结果分配给浮点类型之前,舍弃小数部分。

Logical/Bitwise Mismatch

此代码检查将查找:将逻辑运算符与整数值一起使用或将按位运算符与布尔值一起使用的情况。在C ++中,由于存在隐式转换而允许这样做,但是这种做法容易出错,并且会降低代码的可读性。

Assignment/Equality Mismatch

在条件表达式中使用赋值运算符在语法上是正确的,但在逻辑上可能是错误。此代码检查将会查找在条件语句中将一个常量分配给变量的情况。这几乎总是不正确的,因为它会导致条件语句始终为true或false。

Accidental Copy

C++中的auto关键字是一个很棒的功能,尤其是在和模板代码打交道时。这个关键字有一种很微妙的行为,会让一些C++开发者混淆或轻易忽略。auto不会推断出引用,因此,如果将返回引用的表达式赋值给了一个声明的变量,则会导致变量复制。虽然这并不总是一个错误,但是我们想帮助开发人员意识到当前语句会导致复制,尽管有时可能这是并不是开发者想要的。

Uninitialized Local

默认情况下,C++中的内置类型变量没有是不会被初始化的。这可能导致运行时不确定的行为。这项代码检查的实现是非常激进的,它会在没有变量已声明但是没有初始化的情况下发出警告。

接下来

新的Linter仍在开发中,下面列出了一些将来版本中会出现的新功能。

1) 配置:当前这个功能只能被整体的启用或禁用。目前还不能支持启用/禁用或更改某个检查的严重级别。

2) 禁用某些警告:许多代码分析工具可以按实例里禁用警告。这通常是通过在源代码中使用注释(例如使用#pragma或代码注释)来实现,但是当前Linter还不支持这种功能。

3) 与其他代码分析工具集成:Linter检查目前只能在IDE中运行,因此它不能作为持续集成流程中的一部分。如果有这种集成需求,则需要继续使用基于编译器的代码分析工具(例如,MSVC和Clang-Tidy)。

当启用[后台代码分析]后,您可能会从MSVC或Clang-Tidy的代码分析中看到绿色的波浪提示,这将导致它与编辑器中的Linter检查出现重叠,进而你会看到重复的检查结果。

总结

有段时间,我还认真地研究过一个C++的Linter插件。

那个时候,需要手动在Visual Studio中进行配置才能使用。

后来怎么着了:写代码的时间都不够了,哪有什么功夫对代码进行分析呐。

生活真是不易啊!

代码逻辑分析_致C++完美主义者:使用Visual Studio新工具分析你的代码相关推荐

  1. visual studio 2019 HTML怎么自动生成代码_分享代码——巩敦卫等IST论文

    分享代码:巩敦卫等IST论文:A feedback-directed method of evolutionary test data generation for parallel programs ...

  2. vscode打开html中文乱码,Visual Studio Code 1.44 解决中文代码显示乱码问题(小白图文教程)...

    现今主流的计算机中文字符编码方案是:GBK和UTF-8. 不同编码方案使用不同的字符集,GBK字符集在中文字符长度和字符数量上存在绝对优势,但对国外字符并不支持.所以,完全面向国内的程序/网页使用的是 ...

  3. 如何折叠Visual Studio Code for Windows中的代码部分?

    本文翻译自:How do I collapse sections of code in Visual Studio Code for Windows? How do I fold or collaps ...

  4. vs生成linux服务器程序,从Visual Studio到Linux上调试C++代码

    从Visual Studio到Linux上调试C++代码 04/30/2015 5 分钟可看完 本文内容 [原文发表时间] 2015/4/29 10:00 PM 正如您可能已经听说的那样,Visual ...

  5. 扬长避短使用Windbg和Visual Studio高效调试调试你的代码

    扬长避短使用Windbg和Visual Studio高效调试调试你的代码 经常被问及这样的问题: 你为什么非要使用Windbg调试你的程序? 记得有一次面试的时候笔者也被问到这样的问题,我的回答是:不 ...

  6. python读取pdf表格数据代码_Python新工具:用三行代码提取PDF表格数据

    原标题:Python新工具:用三行代码提取PDF表格数据 机器之心报道 项目作者:vinayak mehta,参与:一鸣 从 PDF 表格中获取数据是一项痛苦的工作.不久前,一位开发者提供了一个名为 ...

  7. 解决visual studio换行(回车键)不能代码补全问题

    解决visual studio换行(回车键)不能代码补全问题 参考文章: (1)解决visual studio换行(回车键)不能代码补全问题 (2)https://www.cnblogs.com/xi ...

  8. Visual Studio中使用Macros插件给代码添加注释、时间和以及自动脚本

    title: Visual Studio中使用Macros插件给代码添加注释.时间和以及自动脚本 date: 2020-09-11 sidebarDepth: 2 tags: 代码 Visual st ...

  9. (续)Visual Studio 连接SQL Server数据库,代码连接

    (续)Visual Studio 连接SQL Server数据库,代码连接(参考项目https://gitee.com/qmagician/book-management-system) 昨天已经将数 ...

最新文章

  1. 2013年第四季度总结报告
  2. linux下curl的使用
  3. python基础教程:startswith()和endswith()的用法
  4. python 生成器笔记
  5. 快速幂算法相关题目(Leetcode题解-Python语言)
  6. WPS for MacOS如何设置自动拼写检查
  7. nsga2代码解读python_代码资料
  8. Leetcode994腐烂的橘子(宽搜)
  9. 通达信公式系统 入门 LTS
  10. PMP不报培训班的通过率高吗?
  11. 联想7x04服务器装系统,联想硬盘保护EDU7X的安装方法.doc
  12. 10KV高压电缆的直流耐压究竟是多少?
  13. python豆瓣250爬取
  14. 两台计算机怎么链接局域网,两台电脑怎么连接局域网
  15. 虚拟机:centos在主机和虚拟机之间传输文件
  16. Apache Druid安装部署手册
  17. QT实现浏览器访问网页,使用QWebEngineView
  18. gitlab 502 Whoops, GitLab is taking too much time to respond.
  19. verilog复习与vhdl入门
  20. Addressable如何删除旧资源

热门文章

  1. python(day04)
  2. C++ 模板的全特化与偏特化
  3. NCS8801S:RGB/LVDS转EDP芯片功能汇总及设计注意事项
  4. atomic与nonatomic的区别
  5. 五个 PostgreSQL 典型故障案例及处理
  6. E: Sub-process /usr/bin/dpkg returned an error code (1)
  7. CentOS 7.4安装postgresql96
  8. MySQL 5.6和MySQL 5.7的区别
  9. Linux系统修改远程连接22端口
  10. 安装zabbix4.0