Chinaunix首页 | 论坛 | 博客
  • 博客访问: 743532
  • 博文数量: 769
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 4985
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 16:37
文章分类

全部博文(769)

文章存档

2011年(1)

2008年(768)

我的朋友

分类:

2008-10-15 16:42:24

  LINT工具是一种软件质量保证工具,许多国外的大型专业软件公司,如微软公司,都把它作为程序检查工具,在程序合入正试版本或交付之前一定要保证通过了LINT检查,他们要求软件工程师在使用LINT时要打开所有的编译开关,如果一定要关闭某些开关,那么要给出关闭这些开关的正当理由。
 
  可想而知,如果从我们编码后第一次编译程序时就使用LINT来检查程序,并且保证消除所有的LINT告警,我们就不会遇到象今天这么多的告警信息。即使在今天,我们如果能抽出一定的精力来消除程序中的LINT告警,以后再维持这种无告警状态就是很容易的了。
 
  我们程序质量的提高也是不言而喻的。
 
  PC-LINT是GIMPEL SOFTWARE公司的产品,其中的内容是非常广泛的,光是选项就有30 0多个,涉及到程序编译及语法使用中的方方面面。本篇培训材料旨在引导读者入门,学会PC-LINT的基本使用方法,起抛砖引玉的作用,能让读者从这里起步继续去研究如何娴熟地使用PC-LINT的各种选项,能让它充分为我们的开发工作服务。
 
  1.概述如果要给LINT工具下一个形象点的定义,那就是:一种更加严格的编译器。它不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。请看下面的例子:

   char *report( int m, int n, char *p )
  {
         int result;
         char *temp;long nm;
         int i, k, kk;
         char name[11] = "Joe Jakeson";
         nm = n * m;temp = p == "" ? "null" : p;
         for( i = 0; i 13: { k++;kk = i;}
         if( k== 1 ) result = nm;
         else if( kk > 0 ) result = 1;
         else if( kk < 0 ) result = -1;
         if( m == result ) return( temp );
         else return( name );
  }

  
  上面的代码用一般的编译器编译是一段有效的代码,但是用PC-LINT编译就会有几个告警。首先第8行向name数组赋值时丢掉了nul字符,第10行的乘法精度会失准,第11行的比较有问题,第14行的变量k没有初始化,第15行的kk可能没有被初始化,第22行的result也有可能没有被初始化,第23行返回的是一个局部对象的地址。这段代码在大部分编译器下是可以顺利编译通过的,继续查找其中的错误就要靠人工调试程序,如果程序很大,这将是一项烦琐的工作,没有人可以保证能找出所有的这类问题,但PC-LINT只通过一次简单的编译就可做到,显然为我们节省了大量的开发时间。
 
  下面就让我们看看如何安装使用PC-LINT. 2.如何安装PC-LINT PC-LINT的软件的安装过程比较复杂,选项较多,下面根据安装过程,逐条说明每一步的含义。
 
  0)如果是zip文件,将ZIP安装文件展开到目录C:\lint.ins下,进入COMMAND PROMPT,先进行目录映射 subst g: c:\lint.ins,然后转到G: , 执行install.其他步骤和下面的从软盘安装是一样的。
 
  1)在A:驱插入PC-LINT安装盘,输入A:\>install命令,进入开始安装栏,按任意键继续,进入PC-LINT介绍栏,再按任意键继续。
 
  2)进入环境选择栏,这一栏中有三个选项: NT/ 95 MS-DOS(DOS extended)
 
  OS/2(32bit)
 
  如果计算机安装了WIN95、WIN97、WIN98或WINNT要选择Windows NT/Windows 95,如果只有DOS则选择DOS.

  3)进入安装目录选择栏,它推荐的是C:\>LINT,如不想安装在这个目录下,可输入自己想要安装的目录,然后按回车确认,如果要安装的目录不存在,它会提示为你建立这个目录。我们这里选C:\>LINT

  4)选择安装盘所在的磁盘驱动器,我们这里选A:

  5)判断是否要选择多种编译器或编译库的配置,如果要对不同编译环境下的程序进行L INT,则选YES,否则选NO.然后回车确认。
 
  6)这时看到一个编译器列表,在这个表中选择自己使用的编译器,如果表中没有自己使用的编译器,可选择通用编译器:Generic Compilers.按回车确认。这个选项会体现在co- xxx.lnt文件中。
 
  7)接着安装程序会让你选择一个的内存模型,可以根据自己程序区和数据区的实际大小选择一个恰当的内存模型。如果CPU为32位68K系列,则要选择:32-bit Flat Module.内存模型的选项会体现在STD.LNT文件中。
 
  8)选完内存模型后,会看到一个库类型的列表,在这里选择一个或多个编译时使用的库。
 
  这个选项会体现在LIB-xxx.LNT文件中。
 
  9)接着是让你选择为使用编程提出过重要建议的作者,选择的某作者后,他提出的编程建议方面的选项将被打开。与作者选择有关的选项会体现在AU-xxx.LNT文件中。
 
  10)下一步是设置包含文件目录。有两种选项,第一种是使用环境变量INCLUDE,环境变量在批处理文件中设置,环境变量后每个目录用分号隔开,例如可设成“INCLUDE=C:\MRI\M CC68K;D:\LAP\SRC\INC”。第二种选项是使用-i选项,-i选项体现在STD.LNT文件中,每个目录前以-I引导,目录间以空格分隔,例如可设成“-IC:\MRI\MCC68K -ID:\LAP\SRC\INC”。如果选择使用-I选项,安装程序会接着让你输入包含文件所在的目录。
 
  11) 如果前面选择了使用多个编译环境,这里将会问你是否选择更多的编译环境,如果选YES,将会从第6步开使重复。如果选NO则会结束编译器选择。
 
  12)接下来将会准备产生一个 反映全局编译信息显示情况的选项文件OPTIONS.LNT,该文件的产生方式有两种,一种是安装程序对几个核心选项逐一解释并提问你是否取消该选项,如果你选择取消,则会体现在OPTIONS.LNT文件中,具体体现方式是在该类信息编码前加-e,后面第13~18步是逐一选择核心选项的过程。如果选择第二种选择方式,安装文件会先生成一个空的OPTIONS.LNT文件,等你以后在实际应用时加入必要的选项。
 
  13)是否关闭赋值时的布尔告警,如:if(a=f()){……
 
  14)是否关闭赋值时的有符号量和无符号量间的不匹配告警,通常情况下,这种赋值不会带来问题,选择关闭该告警信息的同时,其他类型的有符号量和无符号量间混合操作的告警仍然是打开的。
 
  15)当把一个整形量赋值给一个比它短的量时,后者会丢失精度,例如把一个INT量赋值给给一个CHAR量。本步是让你选择是否关闭该类告警。
 
  16)是否关闭左移带符号量的告警。通常PC-LINT会对所有带符号量的移动产生告警,但右移一般是由不同的CPU来确定是否将符号位移入,左移一般是不会产生什么问题的,所以可以选择关闭该告警。
 
  17)在一个C函数被定义或声明前调用它,并不总是会产生错误,在这里可以选择是否关闭该告警选项。该选项对程序不起作用。
 
  18)是否关闭“调用不存在的函数原型”告警。有些程序员不愿遵守严格的函数原形定义约定,但PC-LINT会在调用一个没有定义的函数原型时产生一个告警,在这里可以选择关闭该告警。
 
  19)通过上面的步骤确定OPTIONS.LNT文件的形式后,接着是选择编译环境。PC-LINT提供了集成在多种开发环境中工作的功能,例如可集成在VC、BC、Source Insight中。假如我们在这里选择Source Insight.选择后安装程序会继续问你是否还选择其它的环境,可根据自己应用的实际情况选择一种或多种开发环境。开发环境的选择情况记录在env-xxx.ln t文件中。
 
  20)安装程序会生成一个LIN.BAT文件,该文件是运行PC-LINT的批处理文件,为了使该文件能在任何路径下运行,安装程序提供了两种方法供你选择。第一种方法是让你选择把LI N.BAT拷贝到任何一个PATH目录下,在安装结束运行LCOPY.BAT文件时,会把LIN.BAT拷贝到你指定的目录。第二种方法是生成一个LSET.BAT文件,在每次使用PC-LINT前先运行它来设置路径,或者把LSET.BAT文件的内容拷贝到AUTOEXEC.BAT文件中。
 
  21)在安装程序执行完后第一件事是在你安装的目录下执行LCOPY.BAT文件。它会从安装盘拷贝将一些文件拷贝到安装目录下,并根据你在安装过程中的选择来设置文件中的参数。
 
  3.LINT 一个C文件

  3.1用命令行方式进行LINT如果使用LIN.BAT批处理文件进行LINT,在LINT前要先看一下该批处理文件中的内容,里面包含了LINT-NT命令和命令选项,可以根据自己的要求来修改、增减选项。我们看到,在这个批命令中嵌套了一个std.lnt文件,在std.lnt文件中还嵌套了co.lnt、options.lnt和l ib-stl.lnt文件,原则上*.lnt文件是可以无限制嵌套,该类文件中一般都是了LINT的选项,可通过修改这些文件来修改LINT选项,选项是按照从左到右的顺序执行的。可执行下面命令行:C:\abc\src>lin alpha.c beta.c gamma.c通常对于由多个C模块组成的程序,最好先分别对每个C模块单元进行LINT检查,做单元LI NT时可如下运行:C:\abs\src>lin -u alpha.c其中-u是单元选项,使用-u后可以关闭一些检查多模块时会产生的告警,例如“函数未被使用”或“函数没有定义”等。
 
  也可以不使用LIN.BAT批处理文件,而直接使用LINT命令。在DOS环境下LINT命令为LINT.E XE,在Windows95/NT环境下为LINT-NT.EXE,在OS2环境下为LINT-OS2.EXE.直接使用LINT命令要注意的一点是要在使用前预先设置LINT目录所在路径,最好的方法是把该路径加在AUTOEXEC.BAT文件中。其它的使用方法与使用批处理文件相同。例如:C:\abs\src>lint-nt -ic:\lint\ std.lnt -os(_lint.tmp) *.c

  3.2用开发环境进行LINT也可以使用开发环境来执行LINT操作,一般开发环境都支持运行可执行文件,但不一定支持运行批处理文件,下面用Source Insight , Ultra Edit, MSVC 6.0 来举例说明如何在开发环境下进行LINT.

  3.2.1 在Source Insight中集成如果你在安装过程中选定了使用某个开发环境,安装程序会在你安装的目录下生成一个en v-xxx.lnt的文件,例如选择了Source Insight就会有一个env-si.lnt文件。用编辑器打开该文件,在该文件开始的注释中说明了如何将PC-LINT功能集成在开发环境中,集成在Sou rce Insight中的过程如下:

  1)从Options菜单中选择“Custom Commands”命令项。
 
  2)在Name栏中输入“PC-lint ”,原则上这个名称可以随便起,只要你能搞清楚它的含义就可以了。
 
  3)在Run栏中输入“c:\lint\lint-nt -u -ic:\lint std env-si %f”其中c:\lint是你P C-LINT的安装目录。
 
  4)在Output栏中选择“Iconic Window”、“Capture Output”。
 
  5)在Control栏中选择“Save Files First”。
 
  6)在Source Links in Output栏中选择“Parse Links in Output”、“File,then Lin e”。
 
  7)在Pattern栏中输入“^\([^ ]*\) \([0-9]+\)”。
 
  8)点Add键加入该命令。如下图:9)使用时,在Source Insight下打开要LINT的文件,打开Options菜单中的“Custom Com mands”命令项,在“Command”栏中选择“PC-lint unit check”命令运行即可。
 
  注意到我的Run一栏的参数和上面的提示不一样,其实我的其他古怪参数都放到c:\lint\s td.lnt中了。请注意,不论你怎样配置参数一定不要忘记了将si-env.lnt包含在你的配置文件里,否则就无法进行错误信息和程序的自动对应了。
 
  为了使用方便,你还可以配置一下Menu按钮,将它加到系统菜0单里,这属于一般性的Source Insight应用,笔者就不在此赘述了。
 
  第二笔者在NT中使用Source Insight时,好象集成不了,原因暂时不明了。上面的例子在WIN 95下测试成功。
 
  如果要修改LINT选项,可直接在Run栏中修改,也可专门编辑一个*.lnt文件放在c:\lint目录下,并将该文件名加入Run栏中,和命令行方式是一样的。
 

[1]  

【责编:michael】

--------------------next---------------------

阅读(459) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~