2012年(19)
分类:
2012-01-15 22:50:20
原文地址:编程利器——splint工具 作者:ubuntuer
有人抱怨'不敢用lint工具, 太多的Warnings把快屏幕都淹没了!',不过高手一般不这么想,他会细心琢磨这些Warnings背后的'暗示',并和lint工具沟通,利用 lint工具提供的交互方法屏蔽掉一些经过分析认为不能成为错误的Warnings。久而久之,高手本身就成了一个lint程序,就能够很快的用肉眼发现 代码中的问题,并指出问题所在,如何解决!他还能告知如何嵌入一些Annotations从而避免让lint程序产生不必要的Warnings,这时这位 高手对语言和程序的理解就又提高了一个档次了。其实使用ling工具不仅仅是为了提早发现程序中的Bug,其使用过程有助于你加深对程序的认识和理解。的 确事实就是这样。
Splint就是一款强大而且应用广泛的开源lint工具。它的强大的代码检查能力固 然让人称道,但是让我更欣赏的却是它提供的'Annotations'机制。 Splint可以让程序员在自己的代码中嵌入相应的Anotations,这些Anotations作为Splint分析代码时的输入以帮助Splint 产生对程序员更有用的信息。下面是一些Splint的使用入门,更多详细信息请查看'Splint manual'。
1、最简单的Splint使用方法
>> splint *.c
2、Splint输出Warnings的基本格式
[hint]
我们可以使用'+/-
3、使用flags控制splint的检查范围和输出格式
'+
'-
4、使用.splintrc环境文件
如果不想每次使用splint的时候都手工输入一堆'+/-
5、使用Annotations
对于'Annotations'的作用,Java程序员并不陌生,但是C程序员则对这个不是那么了解。C代码中的Annotations用来指导Splint生成恰当的代码检查报告。下面这个例子对比使用和不使用Annotations,Splint的输出的差别:
/* testlint.c */
void foo1() {
/*@unused@*/int *p = NULL;
}
void foo2() {
int *p = NULL;
}
splint testlint.c
Splint 3.1.1 --- 28 Apr 2003
testlint.c: (in function foo2)
testlint.c:6:7: Variable p declared but not used
A variable is declared but never used. Use /*@unused@*/ in front of
declaration to suppress message. (Use -varuse to inhibit warning)
Finished checking --- 1 code warning
可以看出没使用Annotation的函数foo2被给出Warning了。Splint的Annotations繁多,我们在平时做lint时可以多多接触。
'早用lint,勤用lint',这是C专家给我们的建议。'lint-clean'也许离你并不遥远。
[注1]
'lint-clean' -- 程序能够顺利通过lint程序的检查。