Lint静态代码分析
lint是最著名的C语言工具之一,是由贝尔实验室SteveJohnson于1979在PCC(PortableC Compiler)基础上开发的静态代码分析。
静态程序分析:
“静态程序分析(Static program analysis)”是指使用自动化工具软件对程序源代码进行检查,以分析程序行为的技术,应用于程序的正确性检查、安全缺陷检测、程序优化等。它的特点就是不执行程序,相反,通过在真实或模拟环境中执行程序进行分析的方法称为“动态程序分析(Dynamic program analysis)”。
静态程序分析往往作为一个多人参与的项目中代码审查过程的一个阶段,因编写完一部分代码之后就可以进行静态分析,分析过程不需要执行整个程序,这有助于在项目早期发现以下问题:变量声明了但未使用、变量类型不匹配、变量在使用前未定义、不可达代码、死循环、数组越界、内存泄漏等。下图说明了静态程序分析在进行项目编码过程中所处的位置:
静态程序分析在项目过程中所处的位置
静态分析工具相比编译器,对代码进行了更加严格的检查,像数组越界访问、内存泄漏、使用不当的类型转换等问题,都可以通过静态分析工具检查出来,我们甚至可以在分析工具的分析标准里定义代码的编写规范,在检测到不符合编写规范的代码时抛出告警,这些功能都是编译器没有的。
以上内容摘自代码静态分析工具——splint的学习与使用
LINT工具是一种软件质量保证工具,许多国外的大型专业软件公司,如微软公司,都 把它作为程序检查工具,在程序合入正试版本或交付测试之前一定要保证通过了LINT检查 ,他们要求软件工程师在使用LINT时要打开所有的编译开关,如果一定要关闭某些开关, 那么要给出关闭这些开关的正当理由。 可想而知,如果从我们编码后第一次编译程序时就使用LINT来检查程序,并且保证消 除所有的LINT告警,我们就不会遇到象今天这么多的告警信息。
即使在今天,我们如果能 抽出一定的精力来消除程序中的LINT告警,以后再维持这种无告警状态就是很容易的了。 我们程序质量的提高也是不言而喻的。 PC-LINT是GIMPEL SOFTWARE公司的产品,其中的内容是非常广泛的,光是选项就有30 0多个,涉及到程序编译及语法使用中的方方面面。
如果要给LINT工具下一个形象点的定义,那就是:一种更加严格的编译器。它不仅可 以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求, 但很可能是潜在的、不易发现的错误。
基本功能:
- 可能的空指针
- 在释放内存后使用了指向该内存的指针
- 赋值次序问题
- 拼写错误
- 被0除
- 失败的case语句(遗漏了break语句)
- 不可移植的代码(依赖了特定的机器实现)
- 宏参数没有使用圆括号
- 符号的丢失
- 异常的表达式
- 变量没有初始化
- 可疑的判断语句(例如,if(x=0))
- printf/scanf的格式检查
系统版本:
-
UNIX系统 在UNIX系统中,可自动获得lint,它是一个标准的UNIX工具。
-
Linux系统 在Linux各种发行版中,使用lint的版本是GNU下的Splint(前身是LClint)
-
Windows 在Windows系统中,从第三方获得的lint工具的名称是PC lint以及Splint
以上内容摘自百度百科 lint