
如果想用一个有效的工具察看C/C++源代码中的错误,遗漏,不确定的构建过程,以及移植问题等等,你应该来看看Lint。可以把Lint当成一个编译器,除了不产生代码之外,对于错误和警告的报告来说已经非常足够了。
通常,一个C/C++的编译器假设程序是正确的,而Lint恰恰相反,因此它优于编译器执行的一般性检查。Lint还可以贯穿多个文件来执行它的错误检查和代码分析,这是编译器做不到的。
下面是Lint能够检查的部分错误列表。如果你幸运的话,你的编译器也可以检查出其中的一些,但不会使全部。
- 可能的空指针
- 在释放内存之后使用了该指针
- 赋值次序问题
- 拼写错误
- 被零除
- 失败case 语句 (遗漏了break语句)
- 不可移植的代码
- 宏定义参数没用使用圆括号
- 符号的丢失
- 异常的表达式
- 变量没有初始化
- 可疑的判断语句(例如, if (x = 0))
- printf/scanf 的格式检查
现有的 Lint 程序
这是两个流行的Lint 程序:
- PC-lint是一个由Gimpel Software提供的支持C/C++的商用程序。
- Splint (原来的 LCLint) 是一个GNU免费授权的 Lint程序,但是只支持C不支持C++.
Lint 的运行
运行 Lint 跟运行一个正常的编译器一样,只要把直接加入的makefile 中就可以了。在便以前后都可以运行它。
尽管在编译前运行它看起来更有意义,但有时在成功变以后执行更有价值。这意味着,编译器报告了例如键盘输入错误等各种错误,而Lint在已编译的代码上给与更多的检查。
当使用Lint的时候,不要为他报告的错误及告警信息的数目而惊慌失措。通过学习怎样控制Lint的输出你就不会着这样了。