没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1 基本概念
手册描述的软件有两种方式。对于PC市场(Windows、MS-DOS、OS/2),产品是二进制可执行文
件格式。对于其它平台, 是C源代码形式,名字是FlexeLint。我们在手册的全部部分使用术语
PC-lint/FlexeLint标识所有平台公共的行为。PC-lint/FlexeLint 是一个发现一个模块或多个模块的
C和C++程序的勘误表的软件包。它使用K&R 和ANSI 作为K&R C的标准;它使用ANSI/ISO 委员
会文档作为C++的标准; 很多C ’99 标准的特性集成到这个产品中,但是目前没有支持所有的
C’99标准。根据用户程序的大小来决定总共的需要的内存大小。尤其是,存储的需求依赖于头文
件的大小。粗略估计,每2000行头文件需要的内存存储量大约是1Mb。PC-lint包包含三个可执行
文件:一个Windows可执行文件、一个DOS-extended 可执行文件和一个OS/2 32位可执行文件。
Windows 可执行文件运行在一个Windows环境下的32位控制台应用环境下。DOS 扩展的可执行程
序运行在MS-DOS环境下,使用80386 DOS 扩展技术来访问所有的存在的扩展内存。OS/2 32位可
执行程序只运行在OS/2环境下。FlexeLint包主要由C源代码组成,可以被编译到任何系统。
FlexeLint安装的详细信息可在FlexeLint包中的"FlexeLint Installation Guide"找到。
2 简介
PC-lint/FlexeLint发现C和C++程序中的怪癖、异质、失灵和臭虫。这样分析的目的是发现这些
程序中的在集成前的潜在的问题,揭示可能包含敏感的、未检测到的错误的不寻常的结构。因为
它寻找几个模块而不仅仅是一个,它可以发现编译器不能发现的事情。它通常比编译关于很多细
节更爱挑剔。
2.1 一个例子
考虑下面的C/C++程序(我们故意使这个例子小巧和可理解):
!"#$%%$
&
' #
###$$($$
)#'*++
++#,
)###
)-'#
第 页 共 234 页
1
)*'#.
)##
&,
对于大多数的编译器来说,它是一个有效的C (或C++) 程序。但是,PC-Lint将会报告很多精细
的错误。在第8行分配给!"字符串覆盖字符;在第10行的乘法丢失精度,尽管
比长;第11行的比较是有缺陷的;第12行的变量I没有被初始化;第15行的变量没有被令
人信服地初始化;第17行的变量可能未初始化;第18行,可能返回一个的地址;在小
程序中大多数程序者可以容易地标识出这些问题,但是如果程序是几万行、几百万行,这种工作
对于机器来说更合适,而不是人。
2.2 对C++的lint
C++ 是一个非常特别的语言。不仅是计算机作者的Ray Duncan称这种语言:“是创建的最神
秘和最奇异的语言之一”。
虽然如此,如果C++不存在,它将被创造出来。尽管C是一个非常强大的系统程序语言,但
是它没有象Fortran般复杂的数字,象Basic般复杂的字符串,象Smalltalk的对象或Pascal 般的边界
检查。对于C++,你也没有这些但是你有更重要的事情... 有能力创建这些,并且可能需要的特殊
的问题域的许多其它程序结构。有了这些力量,将有一些混乱、不计后果的骗局、悲伤的失望、
言过其实的要求、总体的拒绝和极端的精神欢快。
作者相信,及时地,语言和它的能力将能被更好理解,它的陷井和缺陷将更容易被识别。我
们希望PC-lint/FlexeLint能对这些做出贡献,尤其是后者。
Lint的最初理由是松散地相关的K&R C 语言检查和通过提供模块内的严格类型检查和几个模
块间的交叉检查满足这两个需要的多模块(独立编译的)的大型语言的检查。ANSI C,某些扩展,
和C++,更多的扩展,提供严格的类型检查。指针不能再化装成 或其它指向的类型;
不能自由地混合;函数需要原型,通过名称毁坏,原型必须模块间一致。甚至宽松的类型
)和)能能被它们安全的类型/中的和 代替。那么lint 要做什么呢
当编译器技术进化到能保证发现lint十年前能够发现的那种错误时,lint工具也在进化。粗略
的估计,1985年的PC-lint 版本可以发现27 个警告和9和提示信息进化到目前的版本,可以发现
229个警告和162个提示信息。虽然几个信息不再和C++ 代码相关,但是大多数仍然相关。例如,
表达式分析,包括寻找不经常使用的联合操作符,赋值问题的顺序,丢失精度,有符号/无符号
不匹配,不寻常的常量,可疑的比较,不寻常的缩排,可疑的截断,非故意的名称隐藏,可疑的
初始化,不适当的使用指向自动变量和无规则宏的指针。
尽管C++的很多复杂的特性,它仍然能产生多虫的的程序。C++的类型检查仍然没有Pascal
严格,但是使用PC-lint/FlexeLint的严格的类型检查选项(见章节8. 严格的类型)可以做到任意的严
格。未初始化变量仍然是C++的一个问题。我们最初地对初始化变量简单扫描,被替换为复杂地
对数据流的分析,目标是发现未覆盖的路径,导致变量使用前没有初始化。见章节9.1 初始化跟
踪.。
用我们介绍的7.00版本,内部语句的数值跟踪,变量值和成员值能被记住和推论出来。如果
以后,这些值对于特定的上下文是不合适的,例如,它们能导致超出范围的下标或访问一个
NULL指针,给出一个适当的信息。见章节9.2数值跟踪。作为一个启动技术,数值跟踪被用来检
查到大量标准库函数的调用。附加地,这些检查可以转移到用户函数。见章节 10.1 函数模仿(-
function)。
PC-lint/FlexeLint 能检查多个模块。甚至将导致程序神秘的行为的模块间的所有函数的原型
第 页 共 234 页
2
和声明不匹配。全局数据可能被初始化或没有被访问;原型可能被不曾预料到的转换;等等。至
少,宏、枚举常量、声明等等,可能仍未使用或多于地声明。通常这些不一致将被警告到一个更
严重的问题。
一些C++的特性导致它们的一些静态分析可能C没有。数据成员的值可以被跟踪,最少在成
员函数内是这样。构造器能被假定原始的数据允许我们报告使用没有初始化的数据成员。析构器
允许我们报告没有删除的指针。
最后,C++提供足够复杂的(某些保守的情况下)设备容易的被获得,尤其对于初学者来说。
断言用户正常使用存在文献[12, 13, 17, 19, 20, 21, 22] ,很多这些该和不该的集成到这个包中。简
单的测试决定是否这个lint或任何其它lint是有用的,仅仅用于你的程序,并看看发生了什么。
2.3 语言定义
Kernighan & Ritchie (K&R) 描述了C程序语言作为早期的事实标准。由Harbison & Steele提供了这
个杰出的标准说明和现有实践。在19世纪八十年代,ANSI C 委员会(X3J11) 开发了一个C标准,
向上支持K&R (它的其中一个原则是“不要打断工作代码”)。大多数卖主接受了这个标准。ISO接
受ANSI C 定义和作者K&R 、H&S在ANSI标准上做的一些令人尊敬的工作。最近,标准被更改
和修正,名字为C99。和C标准的努力齐头并进,Bjarne Stroustrup和其它人“加上封装”加强了C语
言,尤其在抽象类型和面向对象的程序方面。这个加强的版本,名为C++,得到C的在1991年开
始的ANSI(X3J16)和ISO (WG21)团体和标准的广泛的支持。对于标准的基础文档的努力是ANSI
C标准和有注解的C++ 引用手册(ARM). 这些努力导致对于C++国际的标准。对于C 模块,PC-
lint/FlexeLint支持C的C89定义和支持和C89不冲突的K&R定义。它也支持对于特定编译器的通用
扩展。见章节12.非标准扩展,章节 5.8编译器适应和章节13. 预处理器。为在通用扩充的更多的
信息。我们逐渐地合成C99的大部分标准作为需要的基础。对于C++,PC-lint/FlexeLint 完全支持
国际标准。
3 PC-LINT开始
FlexeLint 用户:开始和使用FlexeLint 依赖于你的操作系统和编译器。请看伴随这个文档的
FlexeLint 的安装注意事项。
3.1 安装
这一部分适合于Windows 95、Windows 98、Windows ME、Windows NT和Windows 2000。对于
其它操作系统见章节3.7 其它操作系统。SETUP 是一个传统的setup/installation程序,将确定目标
驱动器是否是有足够的空间,并把文件copy到你选择的驱动器。我们将把这个目录作为安装目录
安装后,将会有下列部分:
./011PC-lint可执行文件;
2/011PC-lint的配置文件;
3/011手册的附录;
./3)11轻便数据格式的操作手册;
/011一个方便的打印工具;
/011我们消息描述的ASCII翻译;
4/011一个卸载程序;
/11一个安装日志;
第 页 共 234 页
3
56――一个子目录,包含...
..../11对特定编译器的编译选项文件;
/11一个通用的编译器选项文件;
..../11对non-ANSI 编译器的标准库模块;
/11对non-ANSI 编译器的通用的标准库模块;
7..../11对不同环境下(包括Microsoft's Visual Studio 和不同的编辑器)的选项文件;
8..../11对特别的库的选项文件;
..../11对作者推荐的检查的选项文件;
9611一个包含不同的测试文件的子目录。见章节3.3 运行测试程序;
安装后,你将得到信息“I want to start the CONFIG.exe file now”。你应该回答“Yes”,配置你对编
译器和库的合适的选项。
3.2 配置
配置程序(2/0),也就是我们谈到的配置wizard,有两个基本的操作模式:
(i) 作为一个wizard帮助你对你的编译器、库和个人的参数选择合适的选项。这个模式在初始化安
装后使用,也可以在后来当配置变化时使用;
(ii) 作为一个程序以后运行,允许你方便的在以前的配置间切换。
无论怎样, 我们需要区别两个目录 (可能事实上是同一个):
安装目录:安装PC-lint的目录;
配置目录:存储配置信息的目录;
在一个如果你的安装目录是可写的,安装目录和配置目录可以相同;如果PC-lint被安装在一个只
读的文件服务器,配置目录和安装目录必须是不同的。PC-lint 没有一个可视的前端。它可以运行
在命令行、在一个集成开发环境中或在一个智能编辑器中(见章节3.5集成在你的环境)。
wizard 将创建一个文件/8,你可以lint C和C++文件使用命令:
options le1 le2 ...
/8将包含一个命令类似这样的形式:
InstDir6..ConfDir 3/::...
这里InstDir是安装目录,ConfDir是配置目录,3/将包含合适的选项来lint。
-选项(完整的描述见章节5.7 其它选项) 如此命名是因为它能确定include目录和管理寻找。文件
的寻找不仅仅是寻找头文件。特别的,3/,被放置在你的配置目录。但是注意,3/也可
以放置在你的当前目录,而且有优先级,这也有它的作用。3/将混合一个编译器选项文件、
一个或多个库选项文件、大小选项和一个/(影响你长期的错误抑制策略的文件)。见
章节14.2建议的安装
总结一下,wizard 将创建下列文件:
5;</=>911一个批处理文件,可以被copy到你的?>9@目录下,里面包含一个参考文件
A9B/5<9;
A9B/5<911一个间接lint文件,内容包括一个编译器选项文件、一个选项文件和随意的其它选项
和文件;
A9BC///5<911一系列不同版本的A9B/5<9,wizard能够以后从中选择;
D/11一个方便的中心本地选项文件,你的大部分的lint选项都写在里面;.
5AE9/=>911一个批处理文件,可被用于放置你的PC-lint 可执行文件到你的?>9@目录中;
使用这些文件可以参考章节3.4Lint你的程序和章节14.2建议的安装Setup。
Wizard将copy一些文件从安装目录(或它的子目录)到配置目录。以下是这些文件:
第 页 共 234 页
4
..../11编译器选项文件;
7..../11环境选项文件;
8..../11库选项文件;
8..../118..../参考的头文件;
..../11作者建议检查的选项文件;
2?/11在下一章节描述的一对测试程序;
3.3 运行测试程序
对PC-lint,在你完成安装和配置后,在以前的事件中,PC-lint可执行文件是./0,在以后
的事件中,它可能是/0或 ./0。I在我们的例子中,我们将使用/8, 巧妙地配置
包含合适的可执行文件。对FlexeLint,你将创建一个类似的Shell脚本(或类似的命令行脚本),为
了表达方便的目的,我们假定名字是。在这个章节,要描述产品的基本操作,我们假定以下定
义两个小文件2/和28/,这些可以在目录3.6中找到。
从你的配置目录
228
例子文件2/和 28/s显示如下:
2/
FF.4347
G
,
28/
G
,
你将在你的屏幕上见到下列信息:
PC-lint for C/C++ (NT) Vers. 8.00, Copyright ...
--- Module: filea.cpp
--- Module: fileb.cpp
_
};
fileb.cpp 4 Warning 631: tag X defined differently at
line 3, file filea.cpp
--- Global Wrap-up
Warning 1527: static member X::a (line 5, file filea.cpp)
not defined
并不是你见到的所有信息都是错误信息。第一行标识出PC-lint的版本;第二行和第三行是过程进
行的信息,正常显示被处理的模块名称信息。你可以关闭这些'verbosity' 信息或增加它们的详细
程度,使用-7... 选项;第四行开始显示错误信息。
3.4 Lint你的程序
要lint你自己的程序,输入一个目录包含你的C和C++模块,我们假定/8(或在主机的操作系统
第 页 共 234 页
5
剩余63页未读,继续阅读
资源评论
- lgdlchshg2014-07-23初用,不错的资料
- itachixy2014-09-02很好,非常有帮助
- dujinzhi2013-06-14对初用着而言,不错的资料
fightfish
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于python的高性能爬虫程序,使用了多线程+缓存+xpath实现的,这里以彼-岸图库为例,实现,仅用于学习交流
- 中分辨率成像光谱仪(MODIS)烧毁面积产品信息MODIS-C6-BA-User-Guide-1.2.pdf
- Screenshot_20240427_172613_com.huawei.browser.jpg
- 关于学习Python的相关资源网站链接及相关介绍.docx
- (HAL库)基于STM32F103C8T6的温控PID系统[Dht11、ESP8266、无线透传、L298N……]
- VoLTE高丢包优化指导书.xlsx
- Rust资源文件.zip
- 前后端分离实践:使用 React 和 Express 搭建完整登录注册流程
- gradle-publish-to-MavenLocal.zip
- 10份网络优化创新案例.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功