收藏 分享(赏)

PC-Lint培训.doc

上传人:hwpkd79526 文档编号:9173484 上传时间:2019-07-26 格式:DOC 页数:5 大小:69KB
下载 相关 举报
PC-Lint培训.doc_第1页
第1页 / 共5页
PC-Lint培训.doc_第2页
第2页 / 共5页
PC-Lint培训.doc_第3页
第3页 / 共5页
PC-Lint培训.doc_第4页
第4页 / 共5页
PC-Lint培训.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、PC-Lint 培训教材1. 编码的问题 两个例子 等号的问题for( uiLoop=1; uiLoop = uiSortedSize; uiLoop+ )iByteIndex = uiElementSelfSize * pstNodeuiLoop;IsResult = pIsSearchFunc( if( IsResult = TRUE )uiFindNode = uiLoop;break; 分号的问题for(i=0;i0x7fffffff;i+)if(abci.ulDiff = 0 num = i;break; 在编写程序时,会出现语法正确而语义错误的情况。编译器对有些写法会给出警告,例如

2、 VC 会对第一段程序给出警告,但第二段不会;而另一个编译器对两端程序都不给出警告。如果编译器不给出警告,这种错误很难发现。找出这类错误的方法包括调试和代码检查。2. PC-Lint 是什么 PC-Lint 是一个检查 C/C+源程序的工具,它可以检查程序的 Bug、移植性不好之处、多余的代码等。 运行环境Windows 9x / Windows NT PC-Lint 能检查的具有代表性的错误 对空指针使用*或- 运算符 数组下标越界 布尔运算恒为真或恒为假 变量未初始化 执行不到的代码 优先级错误,如:flag & 4 = 0 可疑的分号 无符号数与 0 比较 函数返回局部变量的指针 把局部

3、变量的地址赋给全局指针 检查的错误项数达 700 多个(参见第 2 页)3. 如何使用 PC-Lint例如,有如下的一个 C+程序:sampl e.cpp使用 VC6.0 的头文件lin sample.cpp可得到结果:re sult.txt4. 文件说明 lint-nt.exePC-Lint 在 Windows9x 和 WindowsNT 上的可执行文件运行不加参数的 lint-nt.exe 可以得到选项列表和简短的说明。 lin.bat安装时自动生成的批处理文件,它调用 lint-nt.exe,并指定一些选项,包括指定std.lnt,输出结果的文件名,INCLUDE 目录等。使用 PC-L

4、int 时,运行此文件即可。 lcopy.bat安装时用,在 5.3 中有说明。 lset.bat设置 PC-Lint 运行时需要的环境变量,这个文件并不总是需要。如果需要,应在打开 DOS 窗口后,第一次运行 PC-Lint 前运行此文件 std.lnt标准的 lint 选项 options.lnt用户自定义选项,安装时根据用户的选择,可能写入某些选项,也可能为空。用户随时可以加入自己希望的选项(参见第 3 页) 。 co-xxx.lnt编译器选项文件(参见第 3 页) 。 env-xxx.lnt为在编译环境中集成 PC-Lint 而生成的文件,其中包括对如何在编译环境中集成PC-Lint

5、的讲解,以及为了在编译环境中集成 PC-Lint 而必需的选项(参见第 3 页、第 4 页、第 4 页) 。注:以上的.lnt 文件中都可以有 C 或 C+风格的注释 msg.txt记述了 PC-Lint 所检查的错误信息,包括错误号和对错误的详细说明,是检查程序时不可缺少的参考文件。5. 如何安装 PC-Lint5.1 准备工作 把安装程序所在目录映射为磁盘(subst)5.2 运行 install.exe 选择操作系统:Windows NT / Windows 95 输入安装目录: 如 C:LINT 输入安装程序所在盘符: 如 g:如果输入的不是盘符而是目录名,生成的 lcopy.bat

6、将不正确,需要手工修改。 是否需要支持多个编译环境如果安装多个,以后可以用 config.bat 进行选择和切换。 选择编译环境选择编译环境后,会生成名为 Co-xxx.lnt 和 Env-xxx.lnt(对某些编译器)的文件。因为系统提供的头文件可能有与 PC-Lint 的规则冲突的现象,前者用于定义一些选项,使 PC-Lint 略过某些检查。而后者使得在某些集成环境中可以启动 PC-Lint。 选择内存模式:32-bit Flat Model 指定其他库:如果检查 Windows95/NT/MFC 源程序,可以选择 Windows 32-bit,Windows NT,Microsofts

7、Foundation Class library。其原因是这时系统提供的头文件可能有与 PC-Lint 的规则冲突的现象,选择这些库后 PC-Lint 将略过某些检查。 选择 Scott Meyers 和 Dan Saks 建议的对 C+代码的检查规则 指定 Include 目录 Yes, INCLUDE is already used for this purpose已经有名为 INCLUDE 的环境变量, PC-Lint 将使用此环境变量 No, I want to establish an INCLUDE variable创建 INCLUDE 环境变量,可以用分号指定多个目录。 如果选定

8、此选项,运行 PC-Lint 之前需要执行 lset.bat No, Id prefer to use a i option在 std.lnt 中指定 Include 目录 Skip this step不指定 Include 目录注:还可以在 lin.bat 中指定 INCLUDE 目录,参见第 2 页。 是否忽略某些错误。如果指定,将在 options.lnt 中加上某些选项;即使不指定,也创建空的 options.lnt,以后可以在其中加选项。 赋值的布尔值检查在某些需要布尔值的场合,如 if()或 while()的括号中,或&、| 的两边,如果出现赋值语句,如 if ( a = f()

9、),则很有可能是把=误写成了=。 signed/unsigned 不一致signed 和 unsigned 间的赋值(或隐含的赋值如函数调用的参数)往往不会产生问题,因此这种检查可以不进行。事实上还有对更危险的混淆 signed和 unsigned 的情况检查:如负号(不是减号)后面应该是 signed,signed和 unsigned 相除(可能会导致严重的问题:例如,n 是 int 型,u 是unsigned int 型,n = n / u 看起来没有什么问题,如果 n=2 而 u=-2,结果不是-1 而是一个非常大的数)和比较大小等。 int 与 int 的子类型(short、char)

10、等赋值时产生精度损失(如 int 赋给char) 有符号数的左移。有符号数的右移是逻辑右移(高位补 0)还是算术右移(高位补 1)与系统有关,但左移通常不会产生问题(与*2 相同) 。 调用未声明的 C 函数这在 C 中未必是错误,编译程序会把未声明的的函数默认为返回值为 int型。但在 C+中,函数必须要有声明。 调用了没有原型的函数,这在 C 中不是错误。 选择集成环境(可以选择多个)如果在这里选择了某种环境,将生成名为 Env-xxx.lnt 的文件,其中包括注视和选项,以后可以在该环境中启动 PC-Lint。前面曾选择过编译环境,对于某些编译环境,已经生成 Env-xxx.lnt。但是

11、,如果编译器和集成环境不一致,如不使用 Visual C+编译器,但喜欢用 VC 来变程序,则在此处可以指定 VC。 如何在不同的目录中能使用 PC-Lint 把 Lin.bat 拷贝到 PATH 中指定的某个目录中注意:安装后又可能会修改 Lin.bat,在这种情况下应修改拷贝后的文件 把 PC-Lint 目录加到 PATH 中 如何在 VC 中集成 PC-Lint(以 VC6.0 为例) 在 VC 中选择 Tools/Customize 菜单,在弹出的对话框中选择 Tools 标签 双击 Menu contents 中最后一行(空白行) ,输入想要显示在菜单上的文本(如 PC-Lint)

12、选中刚刚输入的行 在 Command 编辑框中输入 lint-nt.exe 的全路径名,如 C:LINTLINT-NT.EXE 在 Arguments 编辑框中输入-iC:LINT +v std.lnt env-vc5.lnt $(FileName),其内容与 Lin.bat 对应,但 env-vc5.lnt 不可缺少 在 Initial directory 编辑框中输入$(FileDir) 选中 Use Output Window 检查框可以把 PC-Lint 检查的结果显示在 Output窗口中 这样,Output 窗口可以和 Source 窗口连动,也可以使用 F4、Shift+F4 定

13、位下/上一个错误5.3 运行 lcopy.bat按照 3.2 所述的步骤安装后,PC-Lint 目录中只有四个文件:std.lntlcopy.batlin.batoptions.batlset.bat(可能没有)必须运行 lcopy.bat 来安装其余的文件6. PC-Lint 的选项6.1 选项通过运行不带参数的 lint-nt.exe,可以得到 PC-Lint 所有选项的信息,选项可以写在options.txt 或 lin.bat 中。写在 std.lnt 中也是可以的,但不推荐。6.2 忽略错误如果认为 PC-Lint 给出的某些警告不会导致错误,可以在 options.lnt 中写“-

14、e#”从而忽略这一项警告,其中#是 msg.txt 中的错误号。还可以写诸如“-esym(516,memset,memcpy)”的选项,表示对于 516 号错误(实参和形参类型不匹配) ,如果函数名是 memset 或 memcpy,则不报错。还有, “-elib(#)”,表示忽略系统头文件中的#号错误,但不忽略用户文件中此项错误。这里提到的只是常用的几种忽略错误的方法,事实上-e#、 -esym(#,symbol)、-elib(#)是 6.1 中所说的 lint 选项中的几种,还有其他的忽略错误的方法。7. 使用 PC-Lint 进行 Code Review 的例子下面是使用 PC-Lint

15、 查到的一些错误,有些是隐藏很深,用肉眼难以看出来的。序号 文件 行号 Lint 号 错误类型 相关文件1 SamplesGpsGetdt.c705 419 memcpy 超界 Samplesgpsdef.h2 Samplesds_eva.c1251 514 可疑的布尔型变量使用3 Samplesddluf.c219 571 字符型左移 8 位4 Samplesvics111.c171 578 局部变量与全局变量同名5 Samplespip_err.c53 616 case 没有 break6 Samplesblk_util.c208 644 变量有可能没初始化7 SamplesdipTrpI

16、N.c174 650 变量与常量比较,常量不在变量的取值范围内(无符号数和-1 相比)8 Sampleslibnet.c221 671 有可能给 strncpy 的第三个参数传-19 Samplesopmbrmgr.c1912 676 数组下标有可能是-110 SamplesUsnRoute.c205 702 有符号类型变量右移(可移植性差,有符号数右移是逻辑右移还是算术右移与编译器有关)11 Samplesndb_lip.c2977 740 可疑的类型转换 Samplesdaletc02.c12 SamplesVcDDLIf.c1262 797 数组下标越界 Samplesvc_com.h8. 附录:PC-Lint 主页Homepageindex.htm

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报