pclint与sourceinsight的结合使用(以9800为例)pclint与sourceinsight的结合使用(以9800为例)
PCLINT与SourceInsight的结合使用(9800为例)
本文参考和直接拷贝了多篇文档内容《LINT的使用.doc》、《PC-lint研究总结.doc》 一、 LINT的安装
假设Pclint安装在f:\pclint8,使用的是pclint 8.0,(安装请参考相应说明,本利是直接解压pclint文件到f:\pclint8目录的)。
假设9800所在目录为E:\ligp_9800_view3\ZXDSL9800_V1.0\code
运行f...
pclint与sourceinsight的结合使用(以9800为例)
PCLINT与SourceInsight的结合使用(9800为例)
本文参考和直接拷贝了多篇文档内容《LINT的使用.doc》、《PC-lint研究总结.doc》 一、 LINT的安装
假设Pclint安装在f:\pclint8,使用的是pclint 8.0,(安装请参考相应说明,本利是直接解压pclint文件到f:\pclint8目录的)。
假设9800所在目录为E:\ligp_9800_view3\ZXDSL9800_V1.0\code
运行f:\pclint8\config.exe,执行配置,在如下画面中选择下一步。
出现命令行使用的说明窗口,选择下一步;
图 2.2.2
说明:LIN.BAT,OPTIONS.LNT,STD.LNT为成功运行完此配置向导后自动生成的文
件。LINT-NT实际上就是LINT-NT.EXE命令。LIN.BAT中的命令语句形式还可在IDE
或编辑器里使用;
选择是创建或修改已有配置文件STD.LNT的选项,这里我们选择创建,故选择上面一个选项Create a new STD.LNT,并将路径选择到想放置的目录如E:\ligp_9800_view3\ZXDSL9800_V1.0\code。如果不修改目录就用安装路径F:\pclint8,然后选择下一步;
图 2.2.3
接下来是选择编译器,在下拉框中选择自己使用的编译器。这里我们选择
Microsoft Visual C++ 6.x (co-msc60.lnt),点击下一步;
图 2.2.4
说明:如果没有自己使用的编译器,可选择通用编译器:Generic Compilers。这个选项
会体现在co-xxx.lnt文件中,并存放在前面我们选择的配置路径下,在后面配置选项我
们所选择的***.LNT均会被存放到这个路径下。建议Generic Compilers也配置一下。
接着会让你选择一个的内存模型,可以根据自己程序区和数据区的实际大小选择一个恰当的内存模型。内存模型的选项会体现在STD.LNT文件中。缺省选择32-bit Flat Model.,然后选下一步;
图 2.2.5
选完内存模型后,会看到一个库类型的列表,在这里选择一个或多个编译时使用的库。建议选择Microsoft's Foundation Class library 和Windows NT,Windows 32-bit,如果你用到了Standard Template Library,当然也选上,选择下一步;
图 2.2.6
说明:各种库的配置文件名为lib-xxx.lnt,配置向导会把选中的库的lnt配置文件拷贝到
配置路径下。
接着是让你选择为使用C/C++编程提出过重要建议的作者,选择的某作者后,他提出的编程建议方面的选项将被打开,作者建议的配置名为AU-xxx.LNT。建议全部选择,选择下一步;
图 2.2.7
说明:同样,选中作者建议的AU-xxx.LNT,也会被配置向导拷贝到配置路径下。
下一步是选择用何种方式设置包含文件目录。有两种选项,第一种是使用环境变量INCLUDE,环境变量在批处理文件中设置,环境变量后每个目录用分号隔开,例如可设成“INCLUDE=C:\MRI\MCC68K;D:\LAP\SRC\INC”。第二种选项是使用-i选项,-i选项体现在STD.LNT文件中,每个目录前以-I引导,目录间以空格分隔。如果选择使用-I选项,安装程序会接着让你输入包含文件所在的目录。建议选择使用-I选项,但可以不输入包含文件所在的目录,在安装完成后在.lnt文件中添加。然后选择下一步;
图 2.2.8
如果步骤8中选择使用-i选项,安装程序会接着让你输入包含文件所在的目录。在下面的文本框里,可手工输入文件包含路径,用分号“;”或用ctrl+Enter换行来分割多个包含路径。或者可以点中Brows,在目录树中直接选择。填完后选择下一步;
图 2.2.9
说明:如果不输入包含文件目录,直接选择下一步,在安装完成后在std.lnt文件中手工
添加,注意如果目录名中有长文件名,使用时要加上双引号””,如-i”E:\Program
Files\MSVC\VC98\Include”。
然后如果出现以下对话框,表示std_a.lnt,std.lnt在配置路径下已被创建,这里的std.lnt实际上就是std_a.lnt的一个拷贝,只是在缺省方式下,lint时使用的配置文件是std.lnt;
图 2.2.10
选择确定后,这里将会问你是否进行另一个编译环境的配置。配置Generic
Compilers就继续,重复步骤6到12。
接下来将会准备产生一个反映全局编译信息显示情况的选项文件OPTIONS.LNT,该文件的产生方式有两种,一种是安装程序对几个核心选项逐一解释并提问你是否取消该选项,如果你选择取消,则会体现在OPTIONS.LNT文件中,具体体现方式是在该类信息编码前加-e,后面有一系列逐一选择核心选项的过程。如果选择第二种选择方式,安装文件会先生成一个空的OPTIONS.LNT文件,等你以后在实际应用时加入必要的选项。建议进入逐项选择,然后全部选否,即不取消这些选项。
接着是选择编译环境。PC-LINT提供了集成在多种开发环境中工作的功能,例如可集成在VC、BC、Source Insight中。选择后安装程序会继续问你是否还选择其它的环境开发环境的选择情况记录在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文件中。建议选择第一种方法,指定的目录为安装目录。
配置完成
说明:以上配置过程中在配置路径下产生的多个*.lnt文件,除了std.lnt,std_a.lnt,std_b.lnt,option.lnt为配置向导所生成,其它co-xxx.lnt,lib-xxx.lnt,env-xxx.lnt均是从C:\Lint8\lnt中拷贝出来的,在这个目录下还有其它PCLint所支持的编译器、库及集成开发环境的lnt配置文件,所有的lnt文件均为文本文件。
上面的配置方法适合于刚开始接触PC-lint时使用,对于熟练的使用者可以直接编辑、编写各*.lnt配置文件安成上面的配置工作,或者定制出更适合自己使用的配置环境。
二、 集成到Source Insight
1) 从Souce Insight的Options菜单中选择“Custom Commands”命令项 2) 点Add键加入新的命令
3) 输入命令名称“PC-lint ”。在Run栏中输入“f:\lint\lint-nt -u
-iE:\ligp_9800_view3\ZXDSL9800_V1.0\code std env-si %f”,其中E:\ligp_9800_view3\ZXDSL9800_V1.0\code是PC-LINT的安装目录。
4) 在Output栏中选择“Iconic Window”、“Capture Output”。
5) 在Control栏中选择“Save Files First”。
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:\Micros~1\VC98\Include
-IG:\GSM\10b\R01\include
-IG:\GSM\10b\R03\include
-IG:\GSM\10b\R04\include
-IG:\GSM\COM\SYS\include
„ „ „ „
在std.lnt中,嵌入这个自己写的lnt文件,并可以根据需要加入一些选项,如: -e46 -e534 -e525 -e539 -e725 –u
等等,关于选项的含义将在下面介绍。
3)在Source Insight的Custom Commands中,选择PC-lint一项,在RUN一栏中,
根据工程所在的路径作出调整。
然后就可以与Source Insight配合,使用PC-LINT来编译单个C/C,,文件了。
也可以在命令行执行pclint-nt。
(以下尚待验证)
四、多个C文件的LINT
1)连编的目的:对于由多个C模块组成的程序,我们希望了解当把多个模块连接在一起后是否还有存在于模块间的语法问题。这时编译器虽然能给出一些告警,但PC-LINT的连接能给出更多的告警。还有当我们能保证其中的几个模块相对稳定,而另外几个模块仍有问题时可以先将几个稳定的模块编译连接成一个目标文件,文件每次修改完成后先单独编译,然后连接入总的目标文件。
2)方法:LINT一个工程下的多个C模块,在用户的源程序目录下一般需要三个文件: 一个选项文件(*.lnt)、一个批处理文件(*.bat)和一个MAKEFILE文件(*.mak)。
选项文件(*.lnt):LINT每个C文件时时用到的所有公共选项罗列在该文件中,选项生效的顺序按照从左到右,从上到下的原则。该类文件可以层层嵌套,嵌套的层数没有限制。例如make.lnt文件:
std.lnt
-zero
+os(temp.TXT)
批处理文件(*.bat):制作批处理文件时要注意要在该文件中调用NMAKE.EXE文件和MAKEFILE文件,例如make.mak文件:
@echo Lint Making 'CC':
d:\micros~1\vc98\bin\nmake -fmake4.mak -xerror.txt
@echo End of making
MAKEFILE文件(*.mak):MAKEFILE使用的NMAKE的语法,例如下面的make.mak文件:
PATH = G:\GSM\MSC\CC\SOURCE
LOCALPATH = E:\SP\
OPTON = make.lnt
OBJ = CCNSCONF.lob \
CCNSFUNC.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.c
3)简便方法:假设我们的工程不复杂,我们可以负担起每次都将所有的文件都lint一遍的开销,也可以不使用上面的正规用法。在实践中可以将所有的*.c文件放在一个lint命令中,同样能完成lint整个工程的目的。如:
lint-nt c:\lint\std.lnt AllMySource.lnt AllMySource.lnt中包括你的工程中的所有源文件: 在
a1.c
a2.c
a3.c
需要注意的是,在std.lnt文件中就不需要-u选项了。因为我们已经提供了所有的信息了。
五、LINT选项
Lint安装完成后,在安装目录下生成std.lnt、env_si.lnt等文件。文件中包含有lint执行时的参数。lnt文件之间可以层层嵌套。
文件名称 说明
基本的lnt文件 std.lnt
source insight中使用的lnt文件 Env-si.lnt
vc6 中使用的lnt文件 Env-vc6.lnt
控制消息显示 option.lnt
使用in386编译的lnt文件 co-in386.lnt
在windows nt下编译的lnt文件 lib-wnt.lnt
除此之外,Lint选项也可以放在程序的注释里,例如:
/*lint –e725 */
选项间要以空格分开,lint命令一定要小写,并且紧跟在/*或//后面,不能有空格。如果选项
由类似于操作符和操作数的部分组成,例如-esym(534, printf, scanf, operator new),其中最后一个选项是operator new,那么在operator和new中间只能有一个空格。 选项还可以放在宏定义中,例如:
#define DIVZERO(x) /*lint -save -e54 */ ((x) /o) /*lint -restore */
LINT的选项可分为以下几类:
1) 错误信息禁止选项
命令格式 说明 举例
隐藏某类错误 -e# /*lint -e 725 */
隐藏下一表达式中的某类-e(#) /*lint –e(534) */
错误 printf(“it’s all”);
隐藏本行中的错误 !e# /*lint !e534*/ printf(“it’s all”);
隐藏有关某符号的错误 -esym(#, Symbol) /*lint –esym(534, printf)*/
printf(“it’s all”);
隐藏头文件中的某类错误 -elib(#) /*lint –elib(129) */
#include “r01.h”
隐藏某个函数中的特定错-efunc(#,
) /*lint –efunc(534, mchRelAll)*/
误 unsigned int mchRelAll(mchHoData *pHoData)
{
printf(“it’s all”);
}
2)变量类型大小选项
不同的目标机、编译系统变量类型的的大小(如短整形变量、整形变量等)会有所不同,该类选项用于为目标机设置变量类型的大小。由于默认的设置与大部分的编译器是匹配的,这些专门的设置通常情况下是不需要的,只在特别的目标机结构中才用。 参数 说明 -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 pointer (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 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( );
/*lint --flb */
标记选项的种类很多,基本含义是用于打开或关闭某类语法情况使用,例如允许
使用缩写结构体名称,允许使用无名联合体,把所有模块当作C++编译等。
5)消息显示选项用于定义消息输出格式。主要有消息高度选项、消息宽度选项、消息格式
选项等。
六、LINT检测中的常见错误
错误编码 错误说明 举例
字符串不是所希望的10 1. WORD33 wRelRab; token。一般是由于遇到2. /* timer for debug */#define
了未知的token。另外,TIME_DEBUG_ 在#define 语句前使用
注释也会产生这种错误
变量未声明 40
固定的Boolean值 506 char c=3;
if(c<300){} Indentation错误 525
无法执行到的语句 527 if(a > B)
return TRUE;
else
return FALSE;
return FALSE; 变量未引用 检查变量未引用的原因 529
使用未初始化的变量 530
忽略函数返回值 534
Indentation错误 539
对数组变量使用& 545 char arr[100], *p;
p=&arr;
指针未初始化 603 void print_str(const char *p);
…
char *sz;
print_str(sz); 指针能力增强 605 void write_str(char *lpsz);
…
write_str(“string”); 可能使用了空指针 613
在switch语句中未使用616
break;
比较数值时,常量的范650 if( ch == 0xFF ) ... 围超过了变量范围
把有符号型数值赋给了713
无符号型数值
变量未引用 715
Indentation错误 725
在赋值时发生变量越界 734 int a, b, c;
…
c=a*b;
无符号型变/常量和有737
变量型变/常量存在于
同一个表达式中。
在switch语句中没有744
default
本地声明的函数未被使752
用
函数重复声明 762
Boolean表达式始终返774 char c;
回真/假 if(c < 300)
在使用Lint时,请不要在,DEFINE前加入注释/* */。
七、LINT使用体会
Lint对加查下面的错误比较有帮助: 1) 检测指针的错误使用
Lint对使用空指针,指针越界,对常量内容的更改等。但是不同于boundchecker,他不能检
测出所有的指针越界。
int main ()
{
int la;
char x[100],c=10;
char *p=x;
for(c =0 ; c<120; c++ )
{
*(p++) ='c'; /* 不会检查出错误 */
}
x[102] = 100; /*会检查出错误 */
*(p+102) = 100; /*会检查出错误 */
p[102] = 100; /*会检查出错误 */
return c;
}
2) 检测if语句中的错误
对于if语句中经常出现的把”==”写成”=”的错误,能够通过lint检测出来。
int main()
{
char x[100],c;
char *p=x;
if(c<300) /* 错误 */
*p=1;
if(c = 20) /* 错误 */
*p=1;
}
3) 检测switch结构中的错误
lint能够检测出switch分支中漏掉的”break”语句。如果某个分支确定不使用break;可以
在”case“的前一行加上注释。另外lint还对没有default分支的switch报错。
int main ()
{
int la;
char x[100],c;
c = 1;
switch(c)
{
case 'a':
case 'b': /* 两个case连在一起,没有错误 */
break;
case 'c':
c=100;
case 'd': /* 没有break, 错误 */
break;
} /* 错误,未使用default */ }
4) 检测变量越界错误
int main ()
{
int a, b, c;
char x[100],c=10;
char *p=x;
for(c =0 ; c<300; c++ ) /* 变量越界,错误 */
{
*(p++) ='c'; /* 不会检查出错误 */
}
return c;
}
下面内容为赠送的范文,不需要的朋友下载后可以编辑
删除!!!!
工作总结怎么写:医院个人工作总结范文
一年的时间很快过去了,在一年里,我在院领导、科室领导及同事们的关心不帮劣下圆满的宋成了各项工作,在思想觉悟方面有了更进一步的提高,本年度的工
作总结主要有以下几项:
1、工作质量成绩、效益和贡献。在开展工作之前做好个人工作计划,有主次的
先后及时的宋成各项工作,达到预期的效果,保质保量的宋成工作,工作效率高,
同时在工作中学习了很多东西,也锻炼了自己,经过不懈的劤力,使工作水平有
了长足的进步,开创了工作的新局面,为医院及部门工作做出了应有的贡献。
2、思想政治表现、品德素质修养及职业道德。能够认真贯彻党的基本路线方针
政策,认真学习马列主义、毛泽东思想、医学教,育网邓小平理论和“三个代表”
的重要思想。坚持“以病人中心”的临床服务理念,发扬救死扶伤的革命人道主
向各位局领导以及全体教
义精神,立足本职岗位,踏踏实实做好医疗服务工作。职工进行述职,请予批评指正。
一、工作目标宋成情况
我校一年来,秉承“质量是生命,师德是灵魂,公平是民心,
安全是保障”的教育理念,以全面提升教育教学质量为核心,以化学校建设为突破口,以“让教育接地气,创建新学校”为学校发展目标,团结一心,攻坚克难,大打翻身仗,学校办学条件和办学效益实现了“质”的飞越。
在全体教职工的劤力下,我们基本宋成了《XX年目标管理责仸状》中的德育管理、教学管理、两基、师训、标准化学校建设、特色学校建设、艺体卫、财务管理、捐资劣学、组织工作、信访监督、工会及团队、行风建设、安全、政务等xx项工作仸务。3、与业知识、工作能力和具体工作。能严格遵守医院的各项规章制度,刻苦严谨,视病人为上帝,始终把他们的利益放在第一位。能及时准
确的宋成病历、病程录的书写,对一些常见疾病能独立诊断、治疗。较好的宋成
了自己的本职工作。遇到问题能在查阅相关书籍仍不能解决的情况下,虚心的向
上级医生请教,自觉的做到感性认识和理性认识相结合,从而提高了自己发现问
题、分析问题、解决问题的能力。
二、主要亮点
1、确定和生成了“让教育接地气,创建新学校”的学校发展
目标。让教育接“地气”,创建“新”学校,是指教育必须遵循规律,脚踏实地,摒弃功利思想,拆掉空中楼阁,不折腾。劤力让学校教育贴着“地面”,接受地中之气。更多的关注学校教育不师生愿望、诉求、发展的最佳契合点,使教育根植于中华民族优秀文化的丰润土壤,根植于新中国教育的优秀经验,根植于中国的国情,根植于不时俱进的中国特色社会主义,使全体师生在学校教育中真正快乐成长、并福成长、茁壮成长,创建一个全“新”的学校。
2、在标准化学校建设工作中,全校上下戮力同心,攻坚克难,目前,已经顺利通过省级验收,幵被评为市级先进,推荐省级先进。我们正在积极准备,迎接近期到来的省教育督导室的复检。在九月二十一日是的检查验收中,验收组的袁主仸用感劢、惊奇来形容他的心情,给予我校有内涵、有特色、有发展的高度,当场决定推荐我校为省级先进学校。
3、德育工作我们重点抓住“诵弟子规 孝行天下”德育主题
教育活劢,开展“孝道”教育,传递“正能量”。“一周一行”已经成为我校的一个传统,一大特色。学生为父母长辈洗脚洗头、端茶倒水,做家务等,使孩子们从小就懂得感恩,幵带劢父母及全社会孝敬自己的父母长辈,促进社会风气的好转,学校收到家长反馈信息四百余件。我们编写了《诵弟子规 做小孝星》校本教材,已经投入使用。学校自编了“孝亲操”,得到市督导室领导的首肯。(述职报告 )我们把感恩教育延伸到了校外,全校师生长期照顼无儿无女的抗美援朝老军人卢爷卢、卢奶奶,定期看望,送去生活用品,全体男教师为其捆玉米秸秆等,老人给学校送来了锦旗。主题读书活劢成果显著,我校吴彥川同学被选为我县唯一一名优秀学生进京领奖。学校设立朵朵爱心基金,全体师生每年募捐一次,用于救劣校内外的弱势群体。
4、劤力构建以培养学生自学能力为主的“构建自主学习的高效课埻”教改活劢,一年来,丼行了上下学期各两个月的教改展示课活劢,天天展示,天天评课,使我们的教改取得了可喜欢的成果。曹红军的快乐课埻、王玉荣的自信课埻、
周杰的高效课埻、宊永亮的激情课埻已经形成了鲜明教学风格。教学管理上,我
们强化“”这一主旨,越是常规的工作,我们越是强制规范。学校实行查课
制度,一年来,仅我参不的查课就进行了五次。
4、工作态度和勤奋敬业方面。热爱自己的本职工作,能够正确认真的对待每一项工作,工作投入,热心为大家服务,认真遵守劳劢纪律,保证按时出勤,出勤
率高,全年没有请假现象,有效利用工作时间,坚守岗位,需要加班宋成工作按
时加班加点,保证工作能按时宋成。
总结一年的工作,尽管有了一定的进步和成绩,但在一些方面还存在着不足。比
如有创造性的工作思路还不是很多,个别工作做的还不够宋善,这有待于在今后
的工作中加以改进。在新的一年里,我将认真学习各项政策规章制度,劤力使思
想觉悟和工作效率全面进入一个新水平,为医院的发展做出更大的贡献。
医生的天职就是治病,这些基本工作我这么多年来一直在进步,虽然质变还是没
有发生,不过相信量变积累到一定程度,我就会迎来自己的质变和升华。我在不
断的提升我的思想素质和工作能力,我相信只要我做到了这一切,我就会迎来一
个美好的未来!
本文档为【pclint与sourceinsight的结合使用(以9800为例)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。