PCLint与sourceInsight的结合使用以为例_第1页
PCLint与sourceInsight的结合使用以为例_第2页
PCLint与sourceInsight的结合使用以为例_第3页
PCLint与sourceInsight的结合使用以为例_第4页
PCLint与sourceInsight的结合使用以为例_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、PCLINT与SourceInsight的结合使用(9800为例)本文参考和直接拷贝了多篇文档内容LINT的使用.doc、PC-lint研究总结.doc一、 LINT的安装假设Pclint安装在f:pclint8,使用的是pclint 8.0,(安装请参考相应说明,本利是直接解压pclint文件到f:pclint8目录的)。假设9800所在目录为E:ligp_9800_view3ZXDSL9800_V1.0code运行f:pclint8config.exe,执行配置,在如下画面中选择下一步。出现命令行使用的说明窗口,选择下一步;说明:LIN.BAT,OPTIONS.LNT,STD.LNT为成功

2、运行完此配置向导后自动生成的文件。LINT-NT实际上就是LINT-NT.EXE命令。LIN.BAT中的命令语句形式还可在IDE或编辑器里使用;选择是创建或修改已有配置文件STD.LNT的选项,这里我们选择创建,故选择上面一个选项Create a new STD.LNT,并将路径选择到想放置的目录如E:ligp_9800_view3ZXDSL9800_V1.0code。如果不修改目录就用安装路径F:pclint8,然后选择下一步;接下来是选择编译器,在下拉框中选择自己使用的编译器。这里我们选择Microsoft Visual C+ 6.x (co-msc60.lnt),点击下一步;说明:如果没

3、有自己使用的编译器,可选择通用编译器:Generic Compilers。这个选项会体现在co-xxx.lnt文件中,并存放在前面我们选择的配置路径下,在后面配置选项我们所选择的*.LNT均会被存放到这个路径下。建议Generic Compilers也配置一下。接着会让你选择一个的内存模型,可以根据自己程序区和数据区的实际大小选择一个恰当的内存模型。内存模型的选项会体现在STD.LNT文件中。缺省选择32-bit Flat Model.,然后选下一步;选完内存模型后,会看到一个库类型的列表,在这里选择一个或多个编译时使用的库。建议选择Microsoft's Foundation Cla

4、ss library 和Windows NT,Windows 32-bit,如果你用到了Standard Template Library,当然也选上,选择下一步;说明:各种库的配置文件名为lib-xxx.lnt,配置向导会把选中的库的lnt配置文件拷贝到配置路径下。接着是让你选择为使用C/C+编程提出过重要建议的作者,选择的某作者后,他提出的编程建议方面的选项将被打开,作者建议的配置名为AU-xxx.LNT。建议全部选择,选择下一步;说明:同样,选中作者建议的AU-xxx.LNT,也会被配置向导拷贝到配置路径下。下一步是选择用何种方式设置包含文件目录。有两种选项,第一种是使用环境变量INCL

5、UDE,环境变量在批处理文件中设置,环境变量后每个目录用分号隔开,例如可设成“INCLUDE=C:MRIMCC68K;D:LAPSRCINC”。第二种选项是使用-i选项,-i选项体现在STD.LNT文件中,每个目录前以-I引导,目录间以空格分隔。如果选择使用-I选项,安装程序会接着让你输入包含文件所在的目录。建议选择使用-I选项,但可以不输入包含文件所在的目录,在安装完成后在.lnt文件中添加。然后选择下一步;如果步骤8中选择使用-i选项,安装程序会接着让你输入包含文件所在的目录。在下面的文本框里,可手工输入文件包含路径,用分号“;”或用ctrl+Enter换行来分割多个包含路径。或者可以点中

6、Brows,在目录树中直接选择。填完后选择下一步;说明:如果不输入包含文件目录,直接选择下一步,在安装完成后在std.lnt文件中手工添加,注意如果目录名中有长文件名,使用时要加上双引号”,如-i”E:Program FilesMSVCVC98Include”。然后如果出现以下对话框,表示std_a.lnt,std.lnt在配置路径下已被创建,这里的std.lnt实际上就是std_a.lnt的一个拷贝,只是在缺省方式下,lint时使用的配置文件是std.lnt;选择确定后,这里将会问你是否进行另一个编译环境的配置。配置Generic Compilers就继续,重复步骤6到12。接下来将会准备产

7、生一个反映全局编译信息显示情况的选项文件OPTIONS.LNT,该文件的产生方式有两种,一种是安装程序对几个核心选项逐一解释并提问你是否取消该选项,如果你选择取消,则会体现在OPTIONS.LNT文件中,具体体现方式是在该类信息编码前加-e,后面有一系列逐一选择核心选项的过程。如果选择第二种选择方式,安装文件会先生成一个空的OPTIONS.LNT文件,等你以后在实际应用时加入必要的选项。建议进入逐项选择,然后全部选否,即不取消这些选项。接着是选择编译环境。PC-LINT提供了集成在多种开发环境中工作的功能,例如可集成在VC、BC、Source Insight中。选择后安装程序会继续问你是否还选

8、择其它的环境开发环境的选择情况记录在env-xxx.lnt文件中。我们选择Source Insight,同样我门还可以选择VC 6.0。安装程序会生成一个LIN.BAT文件,该文件是运行PC-LINT的批处理文件,为了使该文件能在任何路径下运行,安装程序提供了两种方法供你选择。第一种方法是让你选择把LIN.BAT拷贝到任何一个PATH目录下,在安装结束运行LCOPY.BAT文件时,会把LIN.BAT拷贝到你指定的目录。第二种方法是生成一个LSET.BAT文件,在每次使用PC-LINT前先运行它来设置路径,或者把LSET.BAT文件的内容拷贝到AUTOEXEC.BAT文件中。建议选择第一种方法,

9、指定的目录为安装目录。配置完成说明:以上配置过程中在配置路径下产生的多个*.lnt文件,除了std.lnt,std_a.lnt,std_b.lnt,option.lnt为配置向导所生成,其它co-xxx.lnt,lib-xxx.lnt,env-xxx.lnt均是从C:Lint8lnt中拷贝出来的,在这个目录下还有其它PCLint所支持的编译器、库及集成开发环境的lnt配置文件,所有的lnt文件均为文本文件。上面的配置方法适合于刚开始接触PC-lint时使用,对于熟练的使用者可以直接编辑、编写各*.lnt配置文件安成上面的配置工作,或者定制出更适合自己使用的配置环境。二、 集成到Source I

10、nsight1) 从Souce Insight的Options菜单中选择“Custom Commands”命令项2) 点Add键加入新的命令3) 输入命令名称“PC-lint ”。在Run栏中输入“f:lintlint-nt -u -iE:ligp_9800_view3ZXDSL9800_V1.0code std env-si %f”,其中E:ligp_9800_view3ZXDSL9800_V1.0code是PC-LINT的安装目录。4) 在Output栏中选择“Iconic Window”、“Capture Output”。5) 在Control栏中选择“Save Files First”

11、。6) 在Source Links in Output栏中选择“Parse Links in Output”、“File,then Line”。在Pattern栏中输入“( *) (0-9+)”。8) 使用Menu命令把PC_Lint添加到菜单中三、在工程中使用LINT自己编写一个lnt文件(如v1_2.lnt),包含编译要使用的头文件路径: -Id:Micros1VC98Include-IG:GSM10bR01include-IG:GSM10bR03include-IG:GSM10bR04include-IG:GSMCOMSYSinclude 在std.lnt中,嵌入这个自己写的lnt文件,

12、并可以根据需要加入一些选项,如:-e46 -e534 -e525 -e539 -e725 u等等,关于选项的含义将在下面介绍。3)在Source Insight的Custom Commands中,选择PC-lint一项,在RUN一栏中,根据工程所在的路径作出调整。然后就可以与Source Insight配合,使用PC-LINT来编译单个C/C文件了。也可以在命令行执行pclint-nt。(以下尚待验证)四、多个C文件的LINT1)连编的目的:对于由多个C模块组成的程序,我们希望了解当把多个模块连接在一起后是否还有存在于模块间的语法问题。这时编译器虽然能给出一些告警,但PC-LINT的连接能给出

13、更多的告警。还有当我们能保证其中的几个模块相对稳定,而另外几个模块仍有问题时可以先将几个稳定的模块编译连接成一个目标文件,文件每次修改完成后先单独编译,然后连接入总的目标文件。2)方法:LINT一个工程下的多个C模块,在用户的源程序目录下一般需要三个文件: 一个选项文件(*.lnt)、一个批处理文件(*.bat)和一个MAKEFILE文件(*.mak)。选项文件(*.lnt):LINT每个C文件时时用到的所有公共选项罗列在该文件中,选项生效的顺序按照从左到右,从上到下的原则。该类文件可以层层嵌套,嵌套的层数没有限制。例如make.lnt文件: std.lnt -zero+os(temp.TXT

14、)批处理文件(*.bat):制作批处理文件时要注意要在该文件中调用NMAKE.EXE文件和MAKEFILE文件,例如make.mak文件:echo Lint Making 'CC':d:micros1vc98binnmake -fmake4.mak -xerror.txtecho End of makingMAKEFILE文件(*.mak):MAKEFILE使用的NMAKE的语法,例如下面的make.mak文件: PATH = G:GSMMSCCCSOURCELOCALPATH = E:SPOPTON = make.lntOBJ = CCNSCONF.lob CCNSFUNC.

15、lob total.lob : $(OBJ) lint-nt -oo(totoal) make.lnt -e768 -e769 -e310 *.lob CCNSCONF.lob : $(PATH)CCNSCONF.c lint-nt $(OPTON) -oo($(LOCALPATH)CCNSCONF.lob) (PATH)CCNSCONF.c CCNSFUNC.lob : $(PATH)CCNSFUNC.c lint-nt $(OPTON) -oo($(LOCALPATH)CCNSFUNC.lob) $(PATH)CCNSFUNC.c3)简便方法:假设我们的工程不复杂,我们可以负担起每次都将所

16、有的文件都lint一遍的开销,也可以不使用上面的正规用法。在实践中可以将所有的*.c文件放在一个lint命令中,同样能完成lint整个工程的目的。如:lint-nt c:lintstd.lnt AllMySource.lnt在AllMySource.lnt中包括你的工程中的所有源文件:a1.ca2.ca3.c需要注意的是,在std.lnt文件中就不需要-u选项了。因为我们已经提供了所有的信息了。五、LINT选项Lint安装完成后,在安装目录下生成std.lnt、env_si.lnt等文件。文件中包含有lint执行时的参数。lnt文件之间可以层层嵌套。文件名称说明std.lnt基本的lnt文件E

17、nv-si.lntsource insight中使用的lnt文件Env-vc6.lntvc6 中使用的lnt文件option.lnt控制消息显示co-in386.lnt使用in386编译的lnt文件lib-wnt.lnt在windows nt下编译的lnt文件除此之外,Lint选项也可以放在程序的注释里,例如:/*lint e725 */选项间要以空格分开,lint命令一定要小写,并且紧跟在/*或/后面,不能有空格。如果选项由类似于操作符和操作数的部分组成,例如-esym(534, printf, scanf, operator new),其中最后一个选项是operator new,那么在op

18、erator和new中间只能有一个空格。选项还可以放在宏定义中,例如:#define DIVZERO(x) /*lint -save -e54 */ (x) /o) /*lint -restore */LINT的选项可分为以下几类:1) 错误信息禁止选项命令格式说明举例-e#隐藏某类错误/*lint -e 725 */-e(#)隐藏下一表达式中的某类错误/*lint e(534) */printf(“its all”);!e#隐藏本行中的错误/*lint !e534*/ printf(“its all”);-esym(#, Symbol)隐藏有关某符号的错误/*lint esym(534, p

19、rintf)*/printf(“its all”);-elib(#)隐藏头文件中的某类错误/*lint elib(129) */#include “r01.h”-efunc(#, <func>)隐藏某个函数中的特定错误/*lint efunc(534, mchRelAll)*/unsigned int mchRelAll(mchHoData *pHoData)printf(“its all”);2)变量类型大小选项不同的目标机、编译系统变量类型的的大小(如短整形变量、整形变量等)会有所不同,该类选项用于为目标机设置变量类型的大小。由于默认的设置与大部分的编译器是匹配的,这些专门的设

20、置通常情况下是不需要的,只在特别的目标机结构中才用。参数说明-sc#sizeof(char) (1)-ss#sizeof(short) (2)-sl#sizeof(long) (4)-sf#sizeof(float) (4)-sld#sizeof(long) (16)-slc#sizeof(long char) (2)-si#sizeof(int) (2)-sll#sizeof(long) (8)-sd#sizeof(double) (8)-sp#sizeof(all pointers)(2 4)-spF#size of far ptrs(4)-spFD#size of far data po

21、inter (4)-spFP# size of far prog pointer (4)-spD#size of data ptrs (2 4)-spP#size of program ptrs (2 4)-smp# size of all member ptrs (4) -smpP# size of mem ptrs (prog) (4) -smpFP# size of mem ptr (Far Prog) (4)-smpD# size of mem ptr (data) (4)-smpNP# size of mem ptr (Near Prog) (4)-sw# size of wide

22、char (2)3)冗长信息选项冗长信息指的是LINT过程中产生的一些与编译过程有关的信息,而不是真正的告警信息、错误信息等。是否生成这些信息可以通过-v和+v选项来决定。+v是生成这些信息,-v是关闭这些信息,这组选项中除+v外,其它所有选项都可以关闭+v选项。4)标记选项以+f、+f、-f和-f开头的选项是标记选项。他们的逻辑含义分别如下:+f.:通过把标志置为1而把它置为ON-f.:通过把标志置为0而把它置为OFF+f.:标志增1-f.:标志减1后面两个用于你想在局部把一个标志置为ON的情况,而不影响全局设置。例如你可以这样使用:/*lint +flb */int printf( );/

23、*lint -flb */标记选项的种类很多,基本含义是用于打开或关闭某类语法情况使用,例如允许使用缩写结构体名称,允许使用无名联合体,把所有模块当作C+编译等。5)消息显示选项用于定义消息输出格式。主要有消息高度选项、消息宽度选项、消息格式选项等。六、LINT检测中的常见错误错误编码错误说明举例10字符串不是所希望的token。一般是由于遇到了未知的token。另外,在#define 语句前使用注释也会产生这种错误1. WORD33 wRelRab;2. /* timer for debug */#define TIME_DEBUG_40变量未声明506固定的Boolean值char c=3

24、;if(c<300)525Indentation错误527无法执行到的语句if(a > B)return TRUE;elsereturn FALSE;return FALSE;529变量未引用检查变量未引用的原因530使用未初始化的变量534忽略函数返回值539Indentation错误545对数组变量使用&char arr100, *p;p=&arr;603指针未初始化void print_str(const char *p);char *sz;print_str(sz);605指针能力增强void write_str(char *lpsz);write_str(

25、“string”);613可能使用了空指针616在switch语句中未使用break;650比较数值时,常量的范围超过了变量范围if( ch = 0xFF ) .713把有符号型数值赋给了无符号型数值715变量未引用725Indentation错误734在赋值时发生变量越界int a, b, c;c=a*b;737无符号型变/常量和有变量型变/常量存在于同一个表达式中。 744在switch语句中没有default752本地声明的函数未被使用762函数重复声明774Boolean表达式始终返回真/假char c;if(c < 300)在使用Lint时,请不要在DEFINE前加入注释/* */。七、LINT使用体会

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论