lint工具程序

lint工具程序

lint是什么?

lint是最著名的C语言工具之一,是由贝尔实验室SteveJohnson于1979在PCC(PortableC Compiler)基础上开发的静态代码分析,一般由UNIX系统提供。

lint介绍

与大多数C语言编译器相比,lint可以对程序进行更加广泛的错误分析,是一种更加严密的编译工具。最初,lint这个工具用来扫描C源文件并对源程序中不可移植的代码提出警告。但是现在大多数lint实用程序已经变得更加严密,它不但可以检查出可移植性问题,而且可以检查出那些虽然可移植并且完全合乎语法但却很可能是错误的特性。
随着历史的推移,Lint后来形成了一系列的工具,包括PC-Lint/FlexeLint(Gimpel),LintPlus(Cleanscape)以及Splint

lint的功能

lint检查C程序中潜在的错误,包括(但不限于)可疑的类型组合、未使用的变量、不可达的代码以及不可移植的代码。lint会产生一系列程序员有必要从头到尾仔细阅读的诊断信息。使用lint的好处是:1.它可以检查出被编译器漏掉的错误; 2.可以关联很多文件进行错误的检查和代码分析,具有较强大灵活性.lint可以检查的错误类型大体如下:

  • 可能的空指针
  • 在释放内存后使用了指向该内存的指针
  • 赋值次序问题
  • 拼写错误
  • 被0除
  • 失败的case语句(遗漏了break语句)
  • 不可移植的代码(依赖了特定的机器实现)
  • 宏参数没有使用圆括号
  • 符号的丢失
  • 异常的表达式
  • 变量没有初始化
  • 可疑的判断语句(例如,if(x=0))
  • printf/scanf的格式检查
PC-lint

PC-Lint是GIMPELSOFTWARE公司开发的C/C++软件代码静态分析工具,是一个历史悠久(30年之久)且功能异常强大的静态代码检测工具,它的全称是PC-Lint/FlexeLint for C/C++。PC-Lint能够在Windows、MS-DOS和OS/2平台上使用,以二进制可执行文件的形式发布,而FlexeLint运行于其它平台,以源代码的形式发布。PC-lint在全球拥有广泛的客户群,许多大型的软件开发组织(比如Miscrosoft )都把PC-Lint检查作为代码走查的第一道工序。对小公司和个人开发者而言,PC-Lint也非常的重要。小公司往往受到开发成本的考虑,不能对代码进行全面的测试。此时利用PC-Lint的强劲的功能可以很好的提高代码的质量。

C/C++语言的语法拥有其它语言所没有的灵活性,这种灵活性带来了代码效率的提升,但相应也使得代码编写具有很大的随意性,另外C/C++编译器不进行强制类型检查,也不做任何边界检查,这就增加了代码中存在隐患的可能性。如果能够在代码提交测试之前发现这些潜在的错误,就能够极大地减轻测试人员的压力,减少软件项目的除错成本,可是传统的C/C++编译器对此已经无能为力,这个任务只能由专用的代码检查工具完成。而PC-Lint就是这样的代码检查工具。PC-Lint不仅能够对程序进行全局分析,识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针以及冗余的代码,还能够有效地帮你提出许多程序在空间利用、运行效率上的改进点。在代码走读和单元测试之前使用PC-Lint可以提前发现程序中的隐藏错误,提高代码质量,节省测试时间;并提供编码规则检查,规范软件开发人员的编码行为。

一般代码检查功能

PC Lint能检查出代码的语法错误和可能引起程序异常执行的逻辑告警。但它更侧重于后者的检查,因为这类问题更容易被人忽略(前者通过平台编译器去发现)。所以它的代码检查功能通常表现在下面几方面:

强类型检查:强类型检查选项“-strong”和它的辅助(补充)选项“-index”可以对typedef定义的数据类型进行强类型检查,以保证只有相同类型之间的变量才能互相赋值

变量值跟踪:包括对变量值初始化,变量值,函数内变量这些情况进行跟踪,发现其中不符合语法规范的告警
赋值顺序检查:检查当一个表达式的值依赖于赋值的顺序时,是否会出问题

弱定义检查:检查当宏定义、typedef名字、声明、结构、联合和枚举类型这些东西可能在模块中被过多定义且不被使用的情况。

格式检查:检查printf和scanf(及其家族)中的格式冲突告警

缩进检查:检查代码中的缩进问题是为避免出现代码结构不良或者大括号的遗漏等问题
const变量检查

volatile变量检查

发布了80 篇原创文章 · 获赞 84 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43831728/article/details/104670827