PC-Lint选项详解

合集下载

PC-lint简明教程(CC++静态代码检查工具)

PC-lint简明教程(CC++静态代码检查工具)

PC-lint简明教程(CC++静态代码检查⼯具)前⾔PC-lint是⼀款⼩⽽强⼤的C/C++静态代码检查⼯具,它可以检查未初始化变量,数组越界,空指针等编译器很难发现的潜在错误。

在很多专业的软件公司如Microsoft,PC-Lint检查⽆错误⽆警告是代码⾸先要过的第⼀关。

安装配置有关安装步骤,请参考附录中的⽂章“静态代码检查⼯具PC-Lint“的“4 PC-Lint软件使⽤⽅法”,不过该⽂章使⽤的是VC++ 6.0的开发环境,最新的PC-lint 9.0⽀持VS2008,可以在安装过程中⾃⼰选择。

关于PC-lint和VS2008的集成,请参考PC-Lint安装⽬录下的env-vc9.lnt⽂件,⾥⾯讲解的⾮常之详细,不必参考“静态代码检查⼯具PC-Lint”这篇⽂章中的该段内容(如果你的E⽂不是很好,那参考⼀下中⽂还是有帮助的)。

在env-vc9.lnt⽂件中的Simple Check部分,有如下⼀段内容:Arguments: -i"c:/lint" std.lnt env-vc9.lnt "$(ItemFileName)$(ItemExt)"建议使⽤以下⼀段新的Arguments:Arguments: -i"c:/lint" std.lnt env-vc9.lnt "$(ItemDir) $(ItemFileName)$(ItemExt)"作⽤是在检查代码的⽣成结果中,可以双击某⼀个检查结果直接定位到代码中的某⼀⾏,缺点是检查结果会更长⼀点,因为它使⽤了全路径。

依照env-vc9.lnt的说明配置完成后,在VS2008的Tools菜单下会有四个PC-lint的选项,如下图所⽰。

常见错误1. 在PC-lint的Configuration向导结束后,会在PC-lint的安装⽬录下⽣成std.lnt⽂件,⾥⾯有⼀⾏:options.lnt -si4 -sp4如果按照“静态代码检查⼯具PC-Lint“⾛完所有的标准配置的话,options.lnt会⾃动⽣成,但⽆内容(注释除外),如果中间某⼀步skip了,可能该⽂件就不会⽣成,这时就需要⼿动创建⼀个options.lnt⽂件,或在std.lnt中注释掉options.lnt,否则会在使⽤PC-lint时会出现找不到options.lnt的错误。

pclint 规则自定义-概述说明以及解释

pclint 规则自定义-概述说明以及解释

pclint 规则自定义-概述说明以及解释1.引言1.1 概述PCLint是一款流行的静态代码分析工具,用于帮助开发人员提高代码质量和发现潜在的bug。

其强大的规则检测能力使得开发人员能够在编译阶段就发现一些潜在的程序错误,从而帮助节省修复成本和提高代码的健壮性。

本文将重点介绍PCLint规则的自定义功能,通过自定义规则,开发人员可以根据项目的具体需求和编码规范来定制一些特定的规则,从而更好地适应项目的实际情况,提高代码质量和开发效率。

在接下来的章节中,我们将介绍PCLint的基本概念和规则自定义的方法,以及一些实例来帮助读者更好地理解和应用PCLint规则自定义功能。

通过本文的学习,读者将能够更好地利用PCLint工具来改善代码质量,并提高软件开发的效率和质量。

1.2文章结构文章结构部分的内容:文章结构是指文章的整体框架和组织方式。

一个清晰的文章结构可以帮助读者更好地理解文章的内容。

在本文中,我们将按照以下结构来展开讨论:1. 引言部分将介绍本文的背景和意义,概述PCLint规则自定义的重要性以及本文的目的和结构。

2. 正文部分将详细介绍PCLint的简介,包括其功能和特点。

然后将介绍PCLint规则定制的方法,以及如何自定义PCLint规则来满足特定的需求。

3. 结论部分将总结本文的主要内容和观点,提出应用建议,以及展望未来可能的发展方向。

通过以上结构的安排,我们将全面而系统地介绍PCLint规则自定义的相关知识,帮助读者更好地理解和应用这一技术。

1.3 目的在本文中,我们的主要目的是介绍如何通过自定义规则来定制PCLint 的规则,以满足不同项目的代码检查需求。

通过了解PCLint 的规则定制方法和实例,读者可以更好地理解如何根据项目特点和要求,制定符合实际情况的代码规范,提高代码质量和可维护性。

同时,我们也希望通过本文的分享,促进开发团队对代码规范的重视,提高团队的整体开发效率和项目质量。

PC-lint的配置及使用

PC-lint的配置及使用

PC-lint的基本使用方法 PC-lint的基本使用方法
PC-lint的常用选项(一) 的常用选项( 的常用选项 -i 主要用来设置inlude路径,如:-iD:\VC\VC98\Include -e# 屏蔽告警号为#的告警,如: -e1904表示不显示告警号为1904的告警信息 -esym(#,符号名) 屏蔽告警号为#的某个符号的告警,如:-esym(39,std)1904 -emacro(#,宏名称) 屏蔽告警号为#的某个宏的告警
掌握PC-lint的配置方法 使用PC-lint分析程序源代码
PC-lint的配置及使用 PC-lint的配置及使用
实验目的 背景知识 实验内容 实验步骤
背景知识
PC-lint简介 简介 PC-lint的基本使用方法 的基本使用方法
PC-lint简 PC-lint简介
PC-lint是一款 是一款C/C++软件源代码静态分析工 是一款 软件源代码静态分析工 除了可以检查出一般的语法错误外, 具,除了可以检查出一般的语法错误外,它还可 以检查出那些虽然符合语法要求, 以检查出那些虽然符合语法要求,但很可能是潜 在的、不易发现的错误, 在的、不易发现的错误,从而修正模糊或者不正 确的程序设计。 确的程序设计。PC-lint支持几乎所有流行的编辑 支持几乎所有流行的编辑 环境和编译器, 环境和编译器,如Borland C++、 Microsoft 、 Visual C++、Source insight等,可以方便地集成 、 等 到各种开发环境中。 到各种开发环境中。
使用PC-lint分析程序源代码 分析程序源代码 使用
使用PC-lint分析程序源代码,并根据PC-lint的输 出信息,完善代码。

PC-lint配置及使用说明

PC-lint配置及使用说明

1.1简介如果要给lint工具下一个形象点的定义,那就是:一种更加严格的编译器。

它不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。

请看下面的例子:1:char *report( int m, int n, char *p )2:{3:int result;4:char *temp;5:long nm;6:int i, k, kk;7:char name[11] = "Joe Jakeson";8:nm = n * m;9:temp = p == "" "null" : p;10:for (i = 0; i < m; ++i)11:{12:k++;13:kk = i;14:}15:if (k == 1) result = nm;16:else if (kk > 0) result = 1;17:else if (kk < 0) result = -1;18:if (m == result) return(temp);1机密文件,知识产权属迈瑞公司所有第 1 页共 1319:else return(name);20:}上面的代码用一般的编译器编译是一段有效的代码,但是用PC-Lint编译就会有几个告警。

首先第7行向name数组赋值时丢掉了nul字符,第8行的乘法精度会失准,第9行的比较有问题,第12行的变量k没有初始化,第13行的kk可能没有被初始化,第18行的result也有可能没有被初始化,第19行返回的是一个局部对象的地址。

这段代码在大部分编译器下是可以顺利编译通过的,继续查找其中的错误就要靠人工调试程序,如果程序很大,这将是一项烦琐的工作,没有人可以保证能找出所有的这类问题,但PC-Lint只通过一次简单的编译就可做到,显然为我们节省了大量的开发时间。

PC-Lint选项详解

PC-Lint选项详解

-spFP# :
-spD# :
-spP#

-smp# :
-smpD# :
-smpP# :
-smpNP# :
-smpFP# :
-sw#

PCLint选项详解
size of far data pointer,缺省值为6 size of far prog pointer,缺省值为6 size of data ptrs,缺省值为4和6 size of program ptrs,缺省值为4和6,near为4,far为6 size of all member ptrs,缺省值为4 size of member ptr (data),缺省值为4 size of member ptrs (prog),缺省值为4 size of member ptr (Near Prog),缺省值为4 size of member ptr (Far Prog),缺省值为4 size of wide char,缺省值为2
-efile(#,<File>) 对指定文件禁止输出告警号为#的消息 -efunc(#,<Func>) 对于函数Func,禁止输出告警号为#的消息 -elib(#) : 对于库头文件禁止输出告警号为#的消息 -elibsym(#) : 对于所有库头文件中的符号禁止输出告警号为#的消息,此告警不同于
elib之处在于-elib(#)仅仅当分析头文件时不输出相应的告警,如果你在源程 序中使用了会导致告警#的变量等,在分析源程序时还是会告警的,因此要 想完全的关闭该告警,使其在头文件和源文件中均不出现,请使用本选项
第3页,共19页
PCLint选项详解
-emacro(#,Symbol) 对于宏Symbol,当其展开时禁止输出告警号为#的消息

VC中多文件工程的PCLint使用详解

VC中多文件工程的PCLint使用详解

VC中多文件工程的PCLint使用详解VC中多文件工程的PCLint使用详解2006-4-14 Lander 整理介绍:对于多个源程序文件且多个头文件目录的项目进行PCLint 语法检查。

1.安装我使用的是PC.Lint.v8.00e,是不用安装的版本。

解开到E:\PC.Lint.v8.00e目录,可执行文件为Lint.exe(lint-nt.exe与其相同,可能为NT平台用的,在Win2000下都可运行)。

子目录lnt内是检查的规则及选项文件,这两种文件扩展名全为.lnt。

2.准备自己工程的选项文件在E:\PC.Lint.v8.00e\lnt下新建MyProj.lnt文本文件,我们将自己工程的很多头文件目录,在其中一一列出来,内容如下:std.lnt/*注释:包含的规则和/或选项文件*/env-vc6.lnt/*下面为各头文件目录,可以在字串中不要双引号,可以有多行*/-i"C:\MyProj\IncludeA" -i"C:\MyProj\IncludeB" -iC:\MyProj\IncludeC-iC:\MyProj\IncludeD-e641//另一种注释//这是省略#641错误【注意】指明各头文件目录很重要。

头文件各目录的名称可能在VC的Project\Project Settings\Project Options栏中:/I "../Include/PS",可供借鉴(相对路径暂未测试)。

当后面运行Lint时出现无法打开某个头文件时,需要不断添加头文件所在目录的名称到本选项文件中。

3.在VC中运行PCLint(针对单个文件但需包含多个头文件目录):A 点击T ools/Customize/T ools出现定制窗口B 在Menu contents中双击下面的空白拦,输入拟新增的T ool名称:PCLintC 双击PClint项,在Command中填入要调用的.exe文件名:lintArguments:中填入:-i"E:\PC.Lint.v8.00e\lnt" MyProj.lnt $(FilePath)【注意】$(FilePath)这个字串是个宏名,也可以通过点击右边的三角箭头选择;可能为要检查的本文件的路径加文件名,而不能是$(FileName)因为它可能只是文件名而不带路径,将导致使用时说无法发现!另外,MyProj.lnt这个选项文件必须在$(FilePath)之前。

PC-lint配置及使用说明

PC-lint配置及使用说明

1.1简介如果要给lint工具下一个形象点的定义,那就是:一种更加严格的编译器。

它不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。

请看下面的例子:1:char *report( int m, int n, char *p )2:{3:int result;4:char *temp;5:long nm;6:int i, k, kk;7:char name[11] = "Joe Jakeson";8:nm = n * m;9:temp = p == "" ? "null" : p;10:for (i = 0; i < m; ++i)11:{12:k++;13:kk = i;14:}15:if (k == 1) result = nm;16:else if (kk > 0) result = 1;17:else if (kk < 0) result = -1;18:if (m == result) return(temp);19:else return(name);20:}上面的代码用一般的编译器编译是一段有效的代码,但是用PC-Lint编译就会有几个告警。

首先第7行向name数组赋值时丢掉了nul字符,第8行的乘法精度会失准,第9行的比较有问题,第12行的变量k没有初始化,第13行的kk可能没有被初始化,第18行的result也有可能没有被初始化,第19行返回的是一个局部对象的地址。

这段代码在大部分编译器下是可以顺利编译通过的,继续查找其中的错误就要靠人工调试程序,如果程序很大,这将是一项烦琐的工作,没有人可以保证能找出所有的这类问题,但PC-Lint只通过一次简单的编译就可做到,显然为我们节省了大量的开发时间。

由于我们现有的PC-Lint不是安装版,解压后直接使用,因此省略了安装步骤,而直接进入配置阶段。

[计算机软件及应用]PC-lint 中文手册

[计算机软件及应用]PC-lint 中文手册

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++程序(我们故意使这个例子小巧和可理解):1:2: char *report( short m, short n, char *p )3: {4: int result;5: char *temp;6: long nm;7: int i, k, kk;8:char name[11] = "Joe Jakeson";9:10:n m = n * m;11:t emp = p == "" ? "null" : p;12:f or( i = 0; i < m; i++ )13: { k++; kk = i; }14: i f( k == 1 ) result = nm;15:e lse if( kk > 0 ) result = 1;16:e lse if( kk < 0 ) result = -1;17: i f( m == result ) return temp;18: e lse return name;119: }对于大多数的编译器来说,它是一个有效的C (或C++) 程序。

PC-Lint使用指南

PC-Lint使用指南

PC-Lint使用指南1简介PC-Lint是一个历史悠久,功能强大的静态代码检查工具,它不仅可以检查出很多语法逻辑上的隐患,还能帮助提出程序在空间利用、运行效率上的改进点,很多专业的软件公司将PC-Lint检查无错误无警告作为代码首先要过的第一关。

PC-Lint主要有以下功能特点:⏹PC-Lint是一种静态代码检查工具,可以说,PC-Lint是一种更加严格的编译器,不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全符合语法要求,但很可能是潜在的、不易发现的错误。

⏹PC-Lint不但可以检查单个文件,也可以从整个项目的角度来检查问题,因为C语言编译器固有的单个编译,这些问题在编译器环境下很难被检测,而PC-Lint在检查当前文件的同时还会检查所有与之相关的文件。

⏹PC-Lint支持几乎所有流行的编辑环境和编译器,例如Borland C++从1.x到5.x各个版本、Borland C++ Build、GCC、VC,、watcom C/C++、Source insight、UltraEdit等等。

⏹支持MISRA规则检查和支持Scott Meyes的名著(Effective C++/More EffectiveC++)中说描述的各种提高效率和防止错误的方法。

2使用方法随本文一起提供的PC-Lint是一个不用安装的版本,为了方便起见,直接解压到c:\pclint 目录。

PC-Lint重要文件的说明:⏹LINT-NT.EXE:可执行文件,已升级到v8.00w。

⏹PATCH.EXE:用于升级版本的工具。

⏹msg.txt:消息描述文件,描述了各种警告信息。

⏹pc-lint.pdf:PC-Lint在线手册。

⏹readme.txt:在线手册的补充。

⏹lnt\co-xxx.lnt 编译器选项文件。

env-xxx.lnt 编辑环境选项文件。

lib-xxx.lnt 库相关的选项文件。

sl-xxx.lnt 非ANSI编译器的标准库模块。

PC-lint配置及使用说明

PC-lint配置及使用说明

PC-lint配置及使用说明1.1简介如果要给lint工具下一个形象点的定义,那就是:一种更加严格的编译器。

它不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。

请看下面的例子:1:char *report( int m, int n, char *p )2:{3:int result;4:char *temp;5:long nm;6:int i, k, kk;7:char name[11] = "Joe Jakeson";8:nm = n * m;9:temp = p == "" ? "null" : p;10:for (i = 0; i < m; ++i)11:{12:k++;13:kk = i;14:}15:if (k == 1) result = nm;16:else if (kk > 0) result = 1;17:else if (kk < 0) result = -1;18:if (m == result) return(temp);19:else return(name);20:}上面的代码用一般的编译器编译是一段有效的代码,但是用PC-Lint编译就会有几个告警。

首先第7行向name数组赋值时丢掉了nul 字符,第8行的乘法精度会失准,第9行的比较有问题,第12行的变量k没有初始化,第13行的kk可能没有被初始化,第18行的result 也有可能没有被初始化,第19行返回的是一个局部对象的地址。

这段代码在大部分编译器下是可以顺利编译通过的,继续查找其中的错误就要靠人工调试程序,如果程序很大,这将是一项烦琐的工作,没有人可以保证能找出所有的这类问题,但PC-Lint只通过一次简单的编译就可做到,显然为我们节省了大量的开发时间。

由于我们现有的PC-Lint不是安装版,解压后直接使用,因此省略了安装步骤,而直接进入配置阶段。

白盒测试工具Pclint

白盒测试工具Pclint
它通过检查源代码中的语法、结构、 逻辑和数据流,来识别潜在的问题和 错误,并提供详细的报告和建议。
PCLint的特点
全面覆盖
PCLint能够全面覆盖C和C语言的语 法和语义,检测各种类型的错误和缺 陷。
高精度
PCLint采用先进的静态分析技术,能 够准确地识别代码中的问题,减少误 报和漏报。
可定制
白盒测试工具PCLint
目 录
• PCLint简介 • PCLint的安装与配置 • PCLint的使用方法 • PCLint的常见问题与解决方案 • PCLint与其他白盒测试工具的比较 • PCLint的发展趋势与未来展望
01
PCLint简介
什么是PCLint
PCLint是一款白盒测试工具,用于对 C和C代码进行静态分析,以发现潜在 的缺陷、漏洞和不符合编码标准的代 码。
03
支持更多编程语言
为了满足更广泛的需求,PCLint将逐 步支持更多的编程语言,包括新兴的 编程语言和跨平台语言。
PCLint与其他技术的结合应用
与测试框架集成
PCLint将与主流的测试框架(如JUnit、TestNG等)紧密集成,实 现测试与代码分析的无缝对接。
与版本控制系统协作
通过与版本控制系统(如Git、SVN等)集成,PCLint将能够跟踪 代码变更,为开发者提供更准确的代码分析报告。
指定输出目录,用于存放PCLint生成的测试报告和覆盖率文件。
report-junit
生成JUnit格式的测试报告,便于集成到CI/CD工具中。
PCLint的测试用例编写
编写测试用例时,需要遵循一定的命名规范,例如使用“test_”作为前缀 ,以便于识别和组织测试用例。
测试用例应针对待测试的源代码中的函数、类或模块进行编写,确保覆盖 所有重要的功能和边界条件。

代码走查工具—PCLint

代码走查工具—PCLint
6
PC-Lint基本使用方法
要检查所有包括子目录的文件可以使用以下方法: lint-nt -id:\lint std.lnt AllSource.lnt 在AllSource.lnt文件中可以放置如下: Moudule1-Dir\*.cpp Moudule2-Dir\*.cpp Moudule3-Dir\*.cpp ...
%t表示告警类型,如warning, error等
%n表示PC-Lint的告警号
%m表示PC-Lint输出的告警文本信息
16
PC-Lint常用选项
-fallthrough
这个选项主要是用在switch case中没有使用break的情况 可以在代码中使用//lint –fallthrough来消除没有使用break 的告警
-sem选项还有些其他用法,大家可以看PC-Lint自带的pclint.pdf文件,里面有详细的解析
14
PC-Lint常用选项
-function(function0, function1, …)选项
这个选项一般情况下主要是用来表示function1及后面省略掉的函数 和function0有类似的行为。
在SourceInsight3.1中集成PC-Lint过程如下: 1)从Options菜单中选择“Custom Commands”命令项。 2)点Add键会出现下面的Add New Custom Command对话框
在New command name:栏中输入“PC-lint80 ”,原则上这个名称 可以随便起,只要你能搞清楚它的含义就可以了,然后按OK按钮。
这个选项主要是用来屏蔽告警号为#的告警 如:-e818 表示不显示告警号为818的告警
-esym(#, 符号名)选项

pclint -libdir用法

pclint -libdir用法

pclint -libdir用法在使用PCLint进行静态代码分析时,可以使用-libdir选项来指定附加的库文件目录。

具体用法是在PCLint的命令行中加入-libdir选项,后面跟上要指定的库文件目录。

例如:pclint -libdir C:\mylibs上述命令会告诉PCLint在分析过程中搜索C:\mylibs目录下的库文件。

使用-libdir选项可以解决以下问题:1. PCLint默认只会分析源代码文件,对于包含在库文件中的代码不会进行分析。

通过使用-libdir选项,可以让PCLint分析库文件中的代码,从而提供更全面的静态代码分析结果。

拓展:在实际项目中,我们经常会使用第三方库或者自己开发的通用库。

这些库中的代码对项目的功能实现起到了重要的作用。

然而,如果这些库文件中存在潜在的问题,比如内存泄漏、未初始化的变量等,可能会导致整个项目的错误行为或者安全漏洞。

因此,在进行静态代码分析时,值得将这些库文件也纳入分析范围。

PCLint的-libdir选项就为我们提供了将库文件纳入分析范围的方式。

通过指定库文件的目录,PCLint会递归地搜索该目录下的库文件,并分析其中的代码。

这样可以及早地发现并解决库文件中的潜在问题,从而提高整个项目的质量和稳定性。

需要注意的是,使用-libdir选项时,要确保指定的目录中只包含库文件,而非其他类型的文件。

否则,PCLint可能会尝试对非源代码文件进行分析,导致出现错误或者不必要的警告。

同时,我们也可以通过使用-efile选项来排除某些特定的库文件,以避免对其进行分析。

pc_lint的用法转

pc_lint的用法转

pc_lint的⽤法转PC-Lint的检查分很多种类,有强类型检查、变量值跟踪、语义信息、赋值顺序检查、弱定义检查、格式检查、缩进检查、const变量检查和volatile变量检查等等。

对每⼀种检查类型,PC-Lint都有很多详细的选项,⽤以控制PC-Lint的检查效果。

PC-Lint的选项有300 多种,这些选项可以放在注释中(以注释的形式插⼊代码中),例如:/*lint option1 option2 ... optional commentary */ 选项可以有多⾏//lint option1 option2 ... optional commentary 选项仅为⼀⾏(适⽤于C++)选项间要以空格分开,lint命令⼀定要⼩写,并且紧跟在/*或//后⾯,不能有空格。

如果选项由类似于操作符和操作数的部分组成,例如 -esym(534, printf, scanf, operator new),其中最后⼀个选项是operator new,那么在operator和new中间只能有⼀个空格。

PC-Lint的选项还可以放在宏定义中,当宏被展开时选项才⽣效。

例如:#define DIVZERO(x) /*lint -save -e54 */ ((x) /0) /*lint -restore */ 允许除数为0⽽不告警下⾯将分别介绍PC-Lint常⽤的,也是⽐较重要的代码检查类型,并举例介绍了各个检查类型下可能出现的告警信息以及常⽤选项的⽤法:3.1 强类型检查强类型检查选项“-strong”和它的辅助(补充)选项“-index”可以对typedef定义的数据类型进⾏强类型检查,以保证只有相同类型之间的变量才能互相赋值,强类型检查选项strong的⽤法是:-strong( flags[, name] ... )strong选项必须在typedef定义类型之前打开,否则PC-Lint就不能识别typedef定义的数据类型,类型检查就会失效。

Codewarrior中PC-lint使用指南

Codewarrior中PC-lint使用指南

二 级 文 件 文件编号: Q/ECT SJ004 Codewarrior 中PC ‐lint 使用指南页次:第 1 页 共 6 页版次: 1/0常州易控汽车电子有限公司Codewarrior 中PC-lint 使用指南文件编号 ECT/YF-SJ-004 生效日期 2012-02-29 版 次 1/0 管理状态制定 审核批准方成Codewarrior中PC‐lint使用指南 第ii页常州易控汽车电子有限公司 产品研发部Codewarrior中PC-lint使用指南编 号 ECT/YF‐SJ‐004(A)适用产品型号批准: 日期:编 制 校 对 审 核 标 审 审 定 产品研发部 方成工程技术部 生产制造部 质量管理部 经营管理部 市场部 顾客代表更改单号 签 字 日 期文 件 分 发 单 位单 位 数 量 单 位 数 量 单 位 数 量 产品研发部 经营管理部 质量管理部工程技术部 市场部 生产制造部存 档分发人姓名:第iii页 Codewarrior中PC‐lint使用指南文档说明本文档更新历史版本 制定者 日期 更新内容 1/0 方成 2012年02月29日Codewarrior中PC‐lint使用指南 第4页1. Target Settings选项:修改Linker配置成“PCLint Linker”。

2. PCLint Main Settings选项选择PC‐Lint安装的目录第5页 Codewarrior中PC‐lint使用指南3. PCLint Options选项加入“au‐misra2.lnt”,确保该文件au‐misra2.lnt在安装目录下(该文件可以在PC‐lint官方网站上下载)。

Codewarrior中PC‐lint使用指南 第6页4. 编译文件选中要检查的文件,右键菜单,选择“Compile”,即可检查该文件是否满足MISRA 规范。

务必注意在使用PC‐lint检查前,使用Codewarrior编译器能够编译通过该文件。

静态检查工具——PClint

静态检查工具——PClint

静态检查⼯具——PClint简介: pc_lint是GIMPEL SOFTWARE公司开发的C/C++软件代码静态分析⼯具,它的全称是PC-Lint/FlexeLint for C/C++, pc_lint能够在Windows、MS-DOS和OS/2平台上使⽤,以⼆进制可执⾏⽂件的形式发布,⽽FlexeLint 运⾏于其它平台,以源代码的形式发布。

  ⼯具类型:静态⼯具。

⽀持平台:Windows。

使⽤⽅法:可配置到VS外部⼯具,也可以直接命令进⾏检查。

输出⽂件:直接在VS输出窗⼝中输出。

或者输出到⽂件 查看问题:如果在VS窗⼝输出,双击报错⾏,可以直接跳转到问题代码位置。

检查范围: pc_lint不仅能够对程序进⾏全局分析,识别没有被适当检验的数组下标,报告未被初始化的变量,警告使⽤空指针以及冗余的代码,还能够有效地帮你提出许多程序在空间利⽤、运⾏效率上的改进点。

从某种意义上说。

pc_lint是⼀种更加严格的编译器,它除了可以检查出⼀般的语法错误外,还可以检查出那些虽然符合语法要求,但很可能是潜在的、不易发现的错误。

pc_lint的注释: //lint -save -e*** 代码段;//带有error ***的告警信息 //lint –restoreVS2005配置⽅法: 1、⾸先,将获取到的pc_lint压缩包解压到C盘根⽬录,注意放到其他⽬录会导致pc_lint不好⽤。

2、配置VS路径:打开pc_lint对VS的配置⽂件(C:\pclint\std_VS2005.lnt),配置好本地的VS路径,如下图所⽰。

3、配置将要检测的本地代码路径:继续配置刚刚的⽂件(C:\pclint\std_VS2005.lnt),⼀键替换成要检测的本地代码路径。

(此处很重要,每次进⾏⼯程检测时,都需要重新替换,保证检测的⼯程能对得上) 4、修改检测规则配置:打开检测规则配置⽂件(C:\pclint\options.lnt),如下图:类型1代表当前的检测规则;类型2这种⾸位出现//的都算作是注释,和没写⼀样;类型3代表屏蔽的检测规则。

pclint用法

pclint用法

pclint用法
PCLint是一款静态代码分析工具,它广泛用于开发者在编写代码时的错误检查和优化。

下面是使用PCLint的步骤:
1. 安装并配置PCLint
首先,你需要在你的电脑上安装PCLint,并配置好其环境变量。

在此过程中,你需要根据你的具体操作系统和安装版本,查找相应的安装和配置教程,进行操作。

2. 编写代码并保存
接下来,你需要编写代码并将其保存为一个或多个源代码文件,以便后续进行静态代码分析。

在保存过程中,需要注意文件名和文件路径,不能包含任何空格或特殊字符,也需要与实际的项目结构相对应。

3. 运行PCLint
在编写完代码并保存后,你需要运行PCLint对代码进行检测。

这个过程通常需要在命令行终端中执行,具体操作步骤如下:(1)打开命令行终端,并进入代码所在的目录;
(2)输入指令“pclint filename.c”(其中filename.c是你要进行检测的源代码文件名),并执行。

4. 查看输出结果
在代码分析过程中,PCLint会输出一系列有关代码中潜在错误、警告和建议的信息。

这些信息通常包含在一个文本文件中,你需要在命令行终端中打开该文件,并进行分析和处理。

总结来说,使用PCLint进行静态代码分析,需要先安装并配置好PCLint,然后编写代码并保存,最后在命令行终端中运行PCLint并查看分析结果。

这个过程需要仔细操作并遵循一定的规范,以确保PCLint能够准确地检测到代码中存在的问题和优化空间。

PC-LINT 简明使用手册

PC-LINT 简明使用手册

PC-LINT 简明使用手册版本:1.0(版权所有,翻版必究)目录1前言 (3)2软件版本 (3)3功能 (3)4安装与配置 (3)4.1安装 (3)4.2配置 (4)5使用说明 (4)5.1命令行下使用pclint (4)5.2Tornado下使用pclint (6)5.3Source Insight下使用pclint (9)5.4UltraEdit下使用pclint (12)5.5VC++ 6下使用pclint (14)5.6其他说明 (14)6参考文档 (15)6.1《Reference Manual for PC-lint/FlexeLint》Gimpel Software (16)1 前言PC-Lint是由Gimpel Software出品的,一个历史悠久的,功能异常强劲的C/C++代码静态代码检测工具。

随着C语言的诞生它也随之诞生了,经过30来年的发展,它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误。

C语言的灵活性带来了代码效率的提升,但相应带来了代码编写的随意性,另外C编译器不进行强制类型检查,也带来了代码编写的隐患。

PC-Lint不但能够监测出许多语法逻辑上的隐患,它进行程序的全局分析,能识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针,冗余的代码,等等。

而且也能够有效地帮你提出许多程序在空间利用、运行效率上的改进点,这时候,PC-Lint的强劲功能可以很好地提高软件的质量。

2 软件版本当前使用的版本为PC-lint for C/C++ Version 8.00e。

3 功能3.1PC-Lint是一种静态代码检测工具,可以说,PC-LINT是一种更加严格的编译器,不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。

3.2PC-Lint不但可以检测单个文件,也可以从整个项目的角度来检测问题,因为C语言编译器固有的单个编译,这些问题在编译器环境下很难被检测,而PC-Lint在检查当前文件的同时还会检查所有与之相关的文件,可想而知,它会对我们有很大的帮助。

pclint的使用技巧

pclint的使用技巧

pclint的使用技巧pclint的一些使用技巧1 pclint认为代码存在风险就会提出警告。

警告的处理方法有两个:1 修改代码,消除警告。

2 屏蔽警告。

如果认为该类警告没有影响,可以全局忽略,就在ignore.lnt里屏蔽掉。

如果认为该类警告还是有用的,且代码已经人为检查过了,没问题。

就在该行上加注释,只忽略该行的警告。

例如,/*lint !e1762*/2 忽略警告的方法:1 在全局文件ignore.lnt中忽略。

请慎用。

2 忽略文件里某种类型的警告,在源文件开头加上注释,例如: /*lint -e818*/3 忽略单个警告。

在产生警告的行上加注释,例如: /*lint !e1762*/3 现存问题:1 对结构体里的指针,没有检查的机制4 获取支持1 pclint的论坛,找不到检查方法时,可以去官网的论坛搜搜2 PC-lint.pdf第11章值得读一读。

一些高级的用法会用到5 一些技巧* 声明函数可能返回空指针,直接使用返回值会产生警告//lint -sem( soap_help_insert, r_null )char *soap_help_insert(const char *value, const char *text);* 指示函数的参数可能为空,直接使用参数会产生警告//lint ++fpnvoid myFunction1(char *p) {*p=1;}void myFunction2(char *p) {*p=1;}//lint --fpn* 内存泄漏返回申请内存的函数前增加//lint -sem(myAlloc, @p == malloc(10) || @p == 0)释放内存的函数前增加//lint -sem(myFree, custodial(1))* 声明某些函数危险,禁止使用在全局文件ignore.lnt中增加-function(gets, strcpy)* 句柄泄漏//已支持fopen句柄的检查//lint -sem(fopen, @p == malloc(10) || @p == 0)//lint -sem(fclose, custodial(1))。

Pclint选项

Pclint选项

董祖雄-e1551 //析构函数必须catch所有的Exceptions-e1540 //析构函数中必须对所有指针型的成员变量赋值成NULL-e1740 //析构函数中必须对所有指针型的成员变量赋值成NULL-e731 //两个布尔表达式比较,例如 ( false != ...) 或者 ( false == ... )-e1775 //捕获异常通用语句, catch(...)-e737 //赋值语句中, int赋给unsigned int, 导致符号丢失-e713 //调用函数中, 形参是unsigned int, 调用者给予的是int, 导致符号丢失-e732 //调用函数中, 形参是unsigned int, 调用者给予的是long, 导致符号丢失-e740 //强制结构体指针类型转化齐新征// Syntax Errors-e40 // 不再查找NULL-e1058 // Initializing a non-const reference 'struct __rb_tree_base_iterator &' with a non-lvalue// Internal Errors// Fatal Errors// Warnings-e641 //把enum作为int类型使用-e661 //检查数组是否越界,该选项默认应该打开,这里检查单个文件时可以关闭// Informational-e1776 //Converting a string literal to char * is not const safe -e818 //Pointer parameter 'infoPtr' (line 152) could be declared as pointing to const-e1762 //Member function 'McbApsHaMgr::ProcBBackupBegin(void)' could be made const-e1764 //Reference parameter 'msg' (line 1354) could be declared const ref-e715 //检查是否冗余参数,默认打开,检查单个文件时可以关闭// Elective Notes-e1904 //C风格注释不再检查指针类型的强制转换,pclint不允许这样,但是我们有很多代码都用到了,所以建议关闭赵雪山////zhaoxsh added-w3 //设置告警级别1-4,检查时可从1开始,逐步排除,建议检查到Level 3 即可-esym(40,__null) //it says __null is undeclared//my own filter-e30 //Error -- Expected a constant//-esym(429,pOmMo) //pointer pOmMo can't be free until it is unregistered from all-emacro(740,feof) /* ignore errors in macro */-e611 //arning -- Suspicious cast-e661 //Warning -- Possible access of out-of-bounds pointer-e662-e796//end of my own filter-e537 //warning -- Repeated include file-e574 //Signed-unsigned mix with relational-e578 //Warning -- Declaration of symbol hides symbol-e620 //Warning -- Suspicious constant (L or one?))-e1512 //destructor for base class is not virtual-e668 //Warning -- Possibly passing a null pointer to function-e671 //Possibly passing to function 'memcpy(void *, const void *, unsigned int)' a negative value//out put in level 3-e650 //Warning -- Constant out of range for operator *-e613 //Warning -- Possible use of null pointer in left argument to operator -e716 //while(1) is allowed-e766 //Info -- Header file not used in module-e785 //Info -- Too few initializers for aggregate//such as char* myarray[10] = {NULL};-e1774 //Info --Could use dynamic_cast to downcast polymorphic type-e1926 //Note --class member's default constructor implicitly called --Effective C++ #12-e1927 //Note -- Symbol did not appear in the constructor initializer list -e1928 //Note --Base Class did not appear in the constructor initializer list) -- Effective C++ #12wql-e1904 //C风格注释-e1926 //构造函数中初始化成员-e1927 //构造函数中初始化成员。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

-epnc
: 指针指向的字符串类型,仅仅名义上不同
-esym(#,Symbol) 对于指定的符号Symbol(可以是变量名、函数名等),禁止输出告警号为
#的消息,符号Symbol中可以使用通配符*和?。-e#的级别比较高,因此对
于-e714 +esym( 714,alpha ),后一个选项将不起作用
那么它会在宏展开时将n / m看作( n / m )来处理。用处不是很大。
-epn
: 名义上的指针不一致,如:对于指向字节数大小相同的变量的指针
-eps
: 指针指向的类型不同,但大小字节数相同
-epu
: 指针指向的类型仅仅符号不一致
-epp
: 指针指向的类型不确定
-epuc
: 指针指向的字符串类型,其符号不一致
第3页,共19页
PCLint选项详解
-emacro(#,Symbol) 对于宏Symbol,当其展开时禁止输出告警号为#的消息
-emacro((#),Symbol) 对于宏Symbol,当其展开时禁止输出告警号为#的消息,与上一个选项的
区别是它会先将宏加上一对括号再判断,如:#define DIVIDE( n , m ) n / m
PCLint选项详解
PCLint选项详解
目录
1 错误信息禁止选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 变量类型大小选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3 冗余信息选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4 标志选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 格式输出选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 6 其它选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 7 编译器相关选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 8 各种使用说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
-e(#)
: 对于下一个表达式禁止输出告警号为#的消息
!e#
: 在本行禁止输出告警号为#的消息
--e(#) : 对当前的整个表达式禁止输出告警号为#的消息
-eai
: 整型数子类参数不一致,如:char/short vs. int
-ean
: 名义上的参数不一致,如:字节数相同(都是32位)的int和long等
1 错误信息禁止选项
说明: “-” : 表示禁止输出相应的错误消息
“+” : 表示允许输出相应的错误消息
“#” : 允许使用通配符“?”和“*”
除 了900级 别( 900- 999)和1900( 1900-1999) 级别的告警消息缺省是关闭的外, 其它的告
警消息缺省均是打开的。
-e#
: 禁止输出告警号为#的消息
-spN# : size of near ptrs,缺省值为4
-spF#

size of far ptrs ,缺省值为6
-spND# : -spNP# :
size of near data pointer,缺省值为4 size of near prog pointer,缺省值为4
第4页,共19页
-spFD# :
第2页,共19页
PCLint选项详解
以下为PC-lint for C/C++ (NT) Ver. 7.50v版本配置参数的详细解释及用法举例。 LINT选项可以放在注释中,例如:
/*lint option1 option2 ... optional commentary */ 选项可以有多行 //lint option1 option2 ... optional commentary 选项仅为一行 选项间要以空格分开 ,lint命令一定要小写,并且紧跟在/*或 //后面 ,不能有空格。 如果选项由 类似于操作符和操作数的部分组成,例如-esym(534, printf, scanf, operator new),其中最后一个选 项是operator new,那么在operator和new中间只能有一个空格。 选项还可以放在宏定义中,当宏被展开时选项才生效。例如: #define DIVZERO(x) /*lint -save -e54 */ ((x) /0) /*lint -restore */ 允许除数为0而不告警 LINT的选项很多共有300多种,大体可分为以下几类:
8.1 库模块文件的使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 8.2 汇编(非C、C++)文件的处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 8.3 强类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 8.4 PCLint的预处理符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 8.5 选项的处理顺序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 8.6 使告警最大化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 9 附录:PCLint在Source Insight中的使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 9.1 Source Insight的正规表达式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
-eas
: 参数大小相同,如:如果int和pointer字节数相同,那么如果f()的参数应该
是pointer的话,用f(3)整型数调用就会报错,设置此项可以关闭告警
-eau
: 参数类型一致,但是符号类型不一致,如:unsigned int和int
以上四个选项主要FP# :
-spD# :
-spP#

-smp# :
-smpD# :
-smpP# :
-smpNP# :
-smpFP# :
-sw#

PCLint选项详解
size of far data pointer,缺省值为6 size of far prog pointer,缺省值为6 size of data ptrs,缺省值为4和6 size of program ptrs,缺省值为4和6,near为4,far为6 size of all member ptrs,缺省值为4 size of member ptr (data),缺省值为4 size of member ptrs (prog),缺省值为4 size of member ptr (Near Prog),缺省值为4 size of member ptr (Far Prog),缺省值为4 size of wide char,缺省值为2
相关文档
最新文档