书签 分享 收藏 举报 版权申诉 / 71
上传文档赚钱

类型代码走查工具PCLint课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:5003502
  • 上传时间:2023-02-01
  • 格式:PPT
  • 页数:71
  • 大小:726KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《代码走查工具PCLint课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    代码 工具 PCLint 课件
    资源描述:

    1、代码走查工具PCLint目 录PC-Lint简介PC-Lint基本使用方法PC-Lint常用选项PC-Lint在各种环境中的集成PC-Lint常见告警分析及解决措施PC-Lint基本使用方法PC-Lint是一个命令行工具,因此使用方式是命令行带参数方式使用。一般的使用格式为:lint-nt.exe Option file1 file2 如:lint-nt.exe-u-id:lint std.lnt sample.c在这里-u 表示只对本单元进行检查-id:lint 是表示会在d:lint目录下搜索文件std.lnt 是表示要使用的配置文件sample.c 表示要检查的源文件PC-Lint基本使

    2、用方法检查一个目录下的所有源文件可以使用以下方法:如:lint-nt.exe-u-id:lint std.lnt d:ospvos*.cpp跟前面不同的是这里将sample.c变成了d:ospvos*.cpp,使用*.cpp的意思是它会检查d:ospvos目录下的所有.cpp文件,但是它不能检查子目录下的文件PC-Lint基本使用方法要检查所有包括子目录的文件可以使用以下方法:lint-nt -id:lint std.lnt AllSource.lnt 在AllSource.lnt文件中可以放置如下:Moudule1-Dir*.cpp Moudule2-Dir*.cpp Moudule3-Di

    3、r*.cpp .当检查所有文件时不需要使用-u选项PC-Lint基本使用方法PC-Lint配置文件介绍配置文件介绍PC-Lint使用那个配置文件是由命令行参数决定的,一般地都使用std.lnt文件,std.lnt文件中可以包含各种配置选项,还可以包含其他的配置文件,有点类似C的头文件,里面可以include许多其他头文件,不过PC-Lint配置文件包含其他配置文件不需要写include,直接写文件名就可以了。每个配置文件里都可以包含配置选项,这些配置选项也可以放在命令行中,一般为使用方便,命令行中不要放很多选项,尽量都将选项放到配置文件中PC-Lint基本使用方法以下是VC下的配置文件样例/M

    4、icrotec 32-bit,-si4-sp4,lib-w32.lnt/Standard lint optionsco-msc60.lnt /PC-Lint提供的对VC6的告警屏蔽文件lib-w32.lnt /PC-Lint提供的对VC6库头文件的告警屏蔽文件options.lnt -si4-sp4 /用户自定义的选项文件env-vc6.lnt /用户用来设置编辑环境的配置文件-id:vc6vc98include /include 目录-id:vc6vc98mfcinclude /include 目录PC-Lint基本使用方法一般来说,PC-Lint经常会有一些误报,为了消除这些误报,不得不将

    5、程序风格改动来规避,但有时候怎么改写程序都有告警,比如说你定义了两个宏,前面那个宏里有一半大括号,后面那个宏里有另一半大括号,这时候一定会有告警,你不得不使用一些PC-Lint选项来屏蔽这些告警。一般情况下,我们都将自己要写的选项放在Options.lnt文件中PC-Lint基本使用方法另外还有关于编辑环境的问题,如果把PC-Lint集成到某个编辑环境中,那么他输入的格式必须和对应环境吻合才能保证在鼠标点击(或双击)错误消息条目时可以自动定位到对应源代码行,一般来说这类配置都放置在env-xxx.lnt文件中,如VC6的时env-vc6.lnt,SourceInsight的是env-si.ln

    6、tPC-Lint本身提供了对各种编译器及对应库头文件的告警屏蔽文件,如co-msc60.lnt是对vc6的,lib-w32.lnt是对Win32库头文件告警的屏蔽配置文件PC-Lint常用选项-i选项这个选项主要是用来设置include路径的如:-iD:VC6VC98Include-e#选项这个选项主要是用来屏蔽告警号为#的告警如:-e818 表示不显示告警号为818的告警-esym(#,符号名)选项这个选项主要是用来屏蔽告警号为#的某个符号的告警,如-esym(39,std)-emacro(#,宏名称)选项这个选项主要是用来屏蔽告警号为#的某个宏的告警PC-Lint常用选项-dname=va

    7、lue这个选项主要是用来定义一个宏的如:-dWIN32,-dalpha=0-sp#表示指针的尺寸大小是#字节如:-sp4表示指针是4个字节大小-si#表示int的尺寸大小是字节如:-si4表示int型是4个字节大小-t#设置Tab键的大小为#个空格,缺省是8PC-Lint常用选项-sem选项这个选项主要是用来消除一些语义上的告警比如说在一个函数A里面分配了内存,这时调用了另一个函数AddNode将分配的内存保存起来了,因此在函数A里面没有释放内存,如果使用PC-Lint检查会有内存泄漏方面的告警,因为PC-Lint不知道函数AddNode将分配的内存保存起来了,要消除这个告警就要用到-sem选

    8、项了。假设AddNode的第2个参数是用来保存分配内存,用法如下-sem(AddNode,custodial(2)这里custodial关键字是表示保存的意思,2是表示第2个参数。-sem选项还有些其他用法,大家可以看PC-Lint自带的pc-lint.pdf文件,里面有详细的解析PC-Lint常用选项-function(function0,function1,)选项这个选项一般情况下主要是用来表示function1及后面省略掉的函数和function0有类似的行为。如:-function(malloc,mymalloc1,mymalloc2)表示mymalloc1,mymalloc2和mal

    9、loc有类似的行为,因为malloc是用来分配内存的,所以pc-lint在检查mymalloc1和mymalloc2时也会想检查malloc一样看是否有释放掉象上一页里已经定义了AddNode为保存内存的函数,如果碰到还有一个函数AddEvent也是有保存内存的功能,我们除了可以使用-sem(AddEvent,custodial(2)外,也可以使用-function(AddNode,AddEvent),效果是一样的。不过要注意的是AddEvent保存内存的参数也要和AddNode一样是第2个。PC-Lint常用选项-format选项这个选项主要是用来设置输出告警消息格式的,以便于可以和编辑环境

    10、格式一样,便于自动定位到告警对应的源代码如对SourceInsight,-format选项的使用如下:-format=%f%l%t%n:%m“这里%f表示文件名%l表示代码行号%t表示告警类型,如warning,error等%n表示PC-Lint的告警号%m表示PC-Lint输出的告警文本信息PC-Lint常用选项-fallthrough这个选项主要是用在switch case中没有使用break的情况可以在代码中使用/lint fallthrough来消除没有使用break的告警-save保存错误抑制状态如:在代码中使用/lint save e429则表示从这行开始之后的代码抑制429告警的

    11、出现,直到使用/lint restore来进行恢复后才会重新出现429告警-restore重新设置错误抑制状态,使用-save选项抑制的告警将重新恢复,在使用了-save选项后一定要记住使用-restore进行恢复,否则可能有许多告警就被屏蔽调不出现了。PC-Lint常用选项其他一些常用选项还有-elib 抑制库头文件的告警-elibsym 抑制库头文件中某个符号的告警-wlevel 设置告警级别-efile 用来抑制一个或多个文件里的告警-efunc 用来抑制一个或多个函数里的告警+rw 设置保留关键字等等。象-efile,-wlevel这些告警不要轻易使用这些选项的具体用法请看pc-lin

    12、t.pdf文件PC-Lint在各种环境中的集成PC-Lint在各种环境中的集成方法原理都是一样的,只要掌握前面讲的基本用法,知道如何用命令行来检测单个文件,一个目录下的所有文件,许多目录下的所有文件等,然后再结合各种环境的具体设置,就可以很方便地将PC-Lint集成到各种应用环境中了。下面将以VC6,SourceInsight,UltraEdit,Tornado四种环境为例讲述如何集成PC-LintPC-Lint在各种环境中的集成在vc环境中集成在VC的Tools 菜单中,按 Customize会出现下一页出现的对话框先在上面的列表框里增加一个条目,里面填上PC-Lint80,文本内容可以是其

    13、他的,由你自己决定。然后在Command:这一栏中输入PC-Lint的执行文件名,要带上目录再在Arguments:一栏里填上-u-iC:Lint std.lnt$(FileName)这里$(FileName)表示VC窗口里当前打开的文件名你也可以将它改成$(FileDir)*.cpp表示检查当前打开文件同一目录下的所有.cpp文件,通常用于检查一个模块还可以改成AllSource.lnt,象前面讲过的一样,AllSource.lnt是一个放置有所有文件的配置文件,这时要将-u去掉。PC-Lint在各种环境中的集成PC-Lint在各种环境中的集成再在Initial Directory一栏里填上

    14、$(FileDir)最后再将use output window打上勾就完成了将PC-Lint集成到VC环境中PC-Lint在各种环境中的集成在SourceInsight3.1中的集成在SourceInsight3.1中集成PC-Lint过程如下:1)从Options菜单中选择“Custom Commands”命令项。2)点Add键会出现下面的Add New Custom Command对话框在New command name:栏中输入“PC-lint80”,原则上这个名称可以随便起,只要你能搞清楚它的含义就可以了,然后按OK按钮。PC-Lint在各种环境中的集成3)在Run栏中输入“d:lin

    15、tlint-nt-u-ic:lint std.lnt env-si%f”其中d:lint是你PC-LINT的安装目录,%f是表示当前打开的文件。如果要Lint多个文件则需要使用配置文件,在配置文件里包含多个文件,将%f改成你自己的配置文件即可。4)在Output栏中选择“Iconic Window”、“Capture Output”。5)在Control栏中选择“Save Files First”、将缺省打了勾选上的“Pause When Done”改成不选择。6)在Source Links in Output栏中选择“Parse Links in Output”、“File,then Lin

    16、e”。7)在Pattern栏中将缺省设置改成(*)(0-9+)就大功告成了。8)如果需要Lint当前打开文件的同一目录下所有文件,可以将%f改成%d*.cpp如下图:PC-Lint在各种环境中的集成PC-Lint在各种环境中的集成在Tornado2.0环境中集成在Tornado2.0的Tools菜单中点Customize后会出现如下一页的对话框。先在对话框中按Add按钮在Menu Text一栏中输入PC-Lint80在Tool Command:一栏中输入 D:LINTlint-nt.exe-iD:Lint std.lnt$filename 你也可以象前面讲过VC中集成一样,将$filename

    17、改成$filedir*.cpp 或AllSource.lnt在Working一栏中输入$filedir再将Redirect to Child Wind选上,按OK就可以了PC-Lint在各种环境中的集成PC-Lint在各种环境中的集成在UltraEdit环境中集成在Advanced菜单中选Tool Configuration.,显示图如下一页所示在command line:中填写:d:lintlint-nt iD:Lint std.lnt%F在Menu Item中填写:PC-Lint80在Command Output中选择:(x)Output to List Box 和 (x)Capture

    18、Output5)按Insert 按钮再按OK按钮就可以了PC-Lint在各种环境中的集成PC-Lint常见告警分析及解决措施PC-Lint的告警级别定义如下:PC-Lint常见告警分析及解决措施PC-Lint告警分为04级,其中0级是内部错误或致命错误,1级告警是句法错误,2级告警是警告,3级是信息,4级是可选的,4级缺省是不打开的。0级告警是不允许出现的,1级告警一般也是不允许出现的,如果出现,说明可能PC-Lint配置上可能有问题,或者程序根本编译不过,2级告警一般也是不能屏蔽的,2级告警很多是内存资源没有释放,指针越界一类的警告,会产生严重问题,3级告警有些告警也是非常重要的,会引起严重

    19、问题,有些告警属于提示信息,问题不是很大,所以3级告警里要分情况对待。02级告警都不能使用-e选项进行屏蔽,只能使用-esym,-emacro,-sem之类的选项进行屏蔽;3级告警要根据具体情况,有些可以使用-e选项进行屏蔽,有些不可以。下面就对经常遇到的一些告警进行详细的分析及讨论解决措施。PC-Lint常见告警分析及解决措施告警号告警号:39 告警等级告警等级:1告警消息样例告警消息样例:stl_type_traits.h(279):error 39:(Error-Redefinition of symbol _type_traits conflicts with line 271)分析及

    20、解决措施分析及解决措施:可以使用-esym(39,符号名)来消除此告警,在这里可以使用 -esym(39,_type_traitsPC-Lint常见告警分析及解决措施告警号告警号:402 告警等级告警等级:2告警消息样例告警消息样例:XXX.cpp(77):error 402:(Warning-static function VOS_GetFixedStackDepth(void)(line 77)分析及解决措施分析及解决措施:主要是函数原型申明为静态的,但函数实体确漏写了static造成PC-Lint常见告警分析及解决措施告警号告警号:413 告警等级告警等级:2告警消息样例告警消息样例:x

    21、xx.cpp(1118):error 413:(Warning-Likely use of null pointer unknown-name in argument to operator unary*分析及解决措施分析及解决措施:指针未校验引起,如果确认指针可以由外部保证则可以使用ASSERT来消除此告警PC-Lint常见告警分析及解决措施告警号告警号:429 告警等级告警等级:2告警消息样例告警消息样例:XXX.cpp(2474):error 429:(Warning-Custodial pointer pEvent(line 2459)has not been freed or ret

    22、urned)分析及解决措施分析及解决措施:AddEvent将指针pEvent保存起来,解决办法是使用-sem(ISystem:AddEvent,1p,custodial(1)来屏蔽此告警,这里1p是表示第1个参数,custodial(1)是表示第1个参数被保留起来了。另外还有函数递归调用时,如果递归调用时使用的参数和函数参数同名也会出现此告警,递归调用时必须将参数改名。还有一种情况是在父函数里分配了内存,传递到子函数后,由于子函数里有return语句有时也会产生429告警,这种行为非常奇怪,目前没有找到好的消除办法,尽量将程序结构改成把return语句去掉就没有这个告警了。PC-Lint常见告

    23、警分析及解决措施告警号告警号:522 告警等级告警等级:2告警消息样例告警消息样例:error 522:(Warning-Expected void type,assignment,increment or decrement)分析及解决措施分析及解决措施:单独的*p+型可以改写成(*p)+可以避免此告警,如果是*(p+)就没有必要了,直接写成p+就可以了。*p+型作为右值的话一般不会有此告警,另外函数返回值未处理有时也有此告警PC-Lint常见告警分析及解决措施告警号告警号:525 告警等级告警等级:2告警消息样例告警消息样例:Warning 525:Negative indentation

    24、 from line 312分析及解决措施分析及解决措施:如果确定程序没有问题的话,可以检查告警 525的产生是否由于程序中有Tab键或者程序排版没有对齐造成的,将Tab删掉,改成空格,将排版格式对齐就可以了PC-Lint常见告警分析及解决措施告警号告警号:534 告警等级告警等级:2告警消息样例告警消息样例:xxx.cpp(1694):error 534:(Warning-Ignoring return value of function YYY(unsigned long)(compare with line 180分析及解决措施分析及解决措施:一般都是由于没有处理函数返回值造成,如果确信

    25、函数返回值可以不处理的话,只要在不需要处理函数返回值的函数前加上(void)就可以了。PC-Lint常见告警分析及解决措施告警号告警号:539 告警等级告警等级:2告警消息样例告警消息样例:Warning 539:Did not expect positive indentation from line 210分析及解决措施分析及解决措施:除了左边所说的问题外,如果程序中有TAB键,且不是8个空格的话,有时也会引起告警539的产生,如果消除掉左边所说的问题还有539告警的话,则估计是由于程序中有Tab键造成的,将Tab删掉,改成空格,并且排版格式要对齐就可以了。PC-Lint常见告警分析及解决

    26、措施告警号告警号:613 告警等级告警等级:2告警消息样例告警消息样例:XXX.cpp(374):error 613:(Warning-Possible use of null pointer matrix in left argument to operator ptr+int 分析及解决措施分析及解决措施:通常是由于指针和整数相加造成的问题bool*matrix=(bool*)new bool(size_t)(len*len);bool*dep=matrix+row*len;可以改写成先将地址转换成整数形式,再相加后,再将整数形式的地址转换为指针可以消除此告警。另外还有指针在其他函数校验了

    27、,但在本函数内没有校验也会有此告警,象组建中,因为有Initialize()函数里保证那些组件指针的合法性,因此在其他函数里不再需要对这些指针做校验,此种情况可以使用ASSERT()来消除此告警,其他情况请使用指针校验来消除此告警。PC-Lint常见告警分析及解决措施告警号告警号:616 告警等级告警等级:2告警消息样例告警消息样例:XXX.cpp(162):error 616:(Warning-control flows into case/default)分析及解决措施分析及解决措施:case没有break;语句的问题,使用/lint-fallthrough 来屏蔽PC-Lint常见告警分

    28、析及解决措施告警号告警号:661 告警等级告警等级:2告警消息样例告警消息样例:XXX.cpp(2560):error 661:(Warning-Possible access of out-of-bounds pointer(1 beyond end of data)by operator unary*分析及解决措施分析及解决措施:内存越界问题,如果由调用方保证,可以使用ASSERT来消除此告警,否则应该对输入参数进行校验PC-Lint常见告警分析及解决措施告警号告警号:668 告警等级告警等级:2告警消息样例告警消息样例:XXX.cpp(1211):error 668:(Warning-P

    29、ossibly passing a null pointer to function memset(void*,int,unsigned int),arg.no.1 分析及解决措施分析及解决措施:指针可能为null,一般都是由于没有进行校验引起,如果指针由外部可以保证的话,可以使用ASSERT消除这个告警PC-Lint常见告警分析及解决措施告警号告警号:672 告警等级告警等级:2告警消息样例告警消息样例:XXX.cpp(353):error 672:(Warning-Possible memory leak in assignment to pointer cmpFactory:m_pLib

    30、rary)分析及解决措施分析及解决措施:一个函数中申请了内存在本函数中没有释放,在其他函数中释放会引起这个告警可以使用-esym或-sem来消除PC-Lint常见告警分析及解决措施告警号告警号:685 告警等级告警等级:2告警消息样例告警消息样例:XXX.cpp(2346):error 685:(Warning-Relational operator=always evaluates to true)分析及解决措施分析及解决措施:简单问题,通常是代码里判断条件错误造成,修改代码即可 比如定义一个char类型变量,条件判断 让它HashDestroy();if(m_pNameTable!=NUL

    31、L)delete m_pNameTable;m_pNameTable=NULL;明显应该将HashDestroy放到if判断里面,并且要删除掉ASSERT那一行PC-Lint常见告警分析及解决措施告警号告警号:785 告警等级告警等级:2告警消息样例告警消息样例:XXX.cpp(639):error 785:(Info-Too few initializers for aggregate)分析及解决措施分析及解决措施:通常时给数组初始化赋值时没有给所有的赋值造成,可以将其他的也赋值完来消除这个问题。这个告警目前在平台中非常多,即使使用-e参数屏蔽也屏蔽不了,还是会出现,这就要求编码时养成良好的

    32、习惯。PC-Lint常见告警分析及解决措施告警号告警号:786 告警等级告警等级:2告警消息样例告警消息样例:XXX.cpp(2451):error 786:(Info-String concatenation within initializer)分析及解决措施分析及解决措施:同一个字符串分成多行书写时,使用双引号进行连接出的告警,此告警主要是提示是否多个字符串在中间忘了用标点符号格开,有时候有些字符串很长,需要分成多行书写时也会使用多个双引号,这时可以使用/lint save-786,/lint restore来屏蔽PC-Lint常见告警分析及解决措施告警号告警号:794 告警等级告警等级

    33、:2告警消息样例告警消息样例:XXX.cpp(934):error 794:(Info-Conceivable use of null pointer p in left argument to operator ptr-ptr分析及解决措施分析及解决措施:同告警613一样,指针未校验引起,如果校验是在函数外部保证的,可以使用ASSERT来避免此告警PC-Lint常见告警分析及解决措施告警号告警号:796 告警等级告警等级:2告警消息样例告警消息样例:XXX.cpp(396):error 796:(Info-Conceivable access of out-of-bounds pointer

    34、(1 beyond end of data)by operator unary*)分析及解决措施分析及解决措施:指针有可能越界的问题,通常是由于没有校验分配空间长度引起PC-Lint常见告警分析及解决措施告警号告警号:797 告警等级告警等级:2告警消息样例告警消息样例:XXX.cpp(396):error 797:(Info-Conceivable creation of out-of-bounds pointer(2 beyond end of data)by operator+分析及解决措施分析及解决措施:指针未做校验有可能引起越界,比如定义一个指针指向字符串,但是在使用p+操作时没有先

    35、判断指针是否会越界 如可以判断*p!=0或校验指针和起点地址差是否超过预先分配的空间长度。PC-Lint常见告警分析及解决措施告警号告警号:801 告警等级告警等级:3告警消息样例告警消息样例:XXX.cpp(340):error 801:(Info-Use of goto is deprecated)分析及解决措施分析及解决措施:使用了goto语句造成,有些人使用goto语句不规范,如果屏蔽会引发其他程序结构不合理的问题,所以在程序中还是不要使用goto语句。PC-Lint常见告警分析及解决措施告警号告警号:818 告警等级告警等级:3告警消息样例告警消息样例:XXX.c(323):Info

    36、 818:Pointer parameter pGraph(line 206)could be declared as pointing to const分析及解决措施分析及解决措施:这个问题产生主要是因为函数参数在函数中为只读的,可以申明为const类型,但是如果使用以下形式:typdef struct POINT_t int x;int y;POINT,*LPPOINT;int InsertPoint(LPPOINT pPoint);如果使用LPPOINT类型的指针类型来定义参数的话,即使改为const LPPOINT pPoint也仍然会有告警.必须改为 const POINT*pPoi

    37、nt才能消除此告警PC-Lint常见告警分析及解决措施告警号告警号:825 告警等级告警等级:3告警消息样例告警消息样例:XXX.cpp(2243):error 825:(Info-control flows into case/default without-fallthrough comment)分析及解决措施分析及解决措施:使用/lint-fallthrough在代码里进行注释可以消除此告警PC-Lint常见告警分析及解决措施告警号告警号:826 告警等级告警等级:3告警消息样例告警消息样例:XXX.cpp(290):error 826:(Info-Suspicious pointer-

    38、to-pointer conversion(area too small)分析及解决措施分析及解决措施:这个问题的产生通常是由于内存越界造成或将一个空间小的指针转换为一个空间大的指针造成,xxx.cpp中的代码为:pTailCheck=(DWORD*)(CHAR*)pBuf+pPtInfo-BufSize-VOS_PT_BUF_TAIL_LEN);实际上是将 CHAR*转换为DWORD*造成的。可以在本行前使用注释/*lint-save-e826*/屏蔽,在本行后再使用/*lint-restore*/恢复的办法PC-Lint常见告警分析及解决措施告警号告警号:834 告警等级告警等级:3告警消

    39、息样例告警消息样例:int x=(rect.Width()-cxIcon+1)/2;XXX.cpp(178):Info 834:Operator-followed by operator+is confusing.Use parentheses.分析及解决措施分析及解决措施:这个告警很简单,主要是需要使用括号将表达式按运算优先顺序括起来以方便阅读PC-Lint常见告警分析及解决措施告警号告警号:1065 告警等级告警等级:3告警消息样例告警消息样例:XXX.cpp(657):error 1065:(Error-Symbol VOS_TerminateHandle(void)not declar

    40、ed as C conflicts with line 510)分析及解决措施分析及解决措施:在头文件里被申明为extern C,但在cpp文件里函数前没有加上extern C关键字造成PC-Lint常见告警分析及解决措施告警号告警号:1540 告警等级告警等级:3告警消息样例告警消息样例:XXX.cpp(495):error 1540:(Warning-Pointer member CXXXObject:m_pCrc4Fecses(line 76,XXXP.h,module YYY.cpp)neither freed nor zeroed by destructor)分析及解决措施分析及解决

    41、措施:析构函数中没有对成员指针变量进行内存释放或清零操作,修改代码即可PC-Lint常见告警分析及解决措施告警号告警号:1732 告警等级告警等级:3告警消息样例告警消息样例:XXX.cpp(48):error 1732:(Info-new in constructor for class FEC_CURRENT_DATA which has no assignment operator)分析及解决措施分析及解决措施:在构造函数中调用new造成,所以在构造函数中尽量不要分配内存PC-Lint常见告警分析及解决措施告警号告警号:1733 告警等级告警等级:3告警消息样例告警消息样例:XXX.cp

    42、p(11):error 1733:(Info-new in constructor for class ABXError which has no copy constructor)分析及解决措施分析及解决措施:在构造函数中使用了new函数,但没有拷贝构造函数有时会出现这个告警PC-Lint常见告警分析及解决措施告警号告警号:1735 告警等级告警等级:3告警消息样例告警消息样例:Info 1735:Virtual function CXXXTest:Set(const char*)has default parameter分析及解决措施分析及解决措施:这个问题产生主要是因为虚函数有缺省参数可

    43、以使用/*lint-save-e1735*/和/*lint-restore*/来屏蔽PC-Lint常见告警分析及解决措施告警号告警号:1740 告警等级告警等级:3告警消息样例告警消息样例:XXX.cpp(101):error 1740:(Info-pointer member CXXXManager:m_pCpuChArr(line 184,file YYY.h)not directly freed or zeroed by destructor)分析及解决措施分析及解决措施:调用了VOS_Free造成,可以使用/*lint-save-e1740*/和/*lint-restore*/来屏蔽,

    44、有时候定义了一个类的成员指针变量,析构函数没有释放或将指针赋空的话也会有此告警,只要在析构函数中将指针赋成0即可消除此告警。这个告警在平台中也是出现非常多的,即使使用-e1740也屏蔽不了。PC-Lint常见告警分析及解决措施告警号告警号:1762 告警等级告警等级:3告警消息样例告警消息样例:XXX.cpp(265):error 1762:(Info-Member function CXXXManager:GetXXXInfo(unsigned char&,struct XXX_INFO*&)could be made const)分析及解决措施分析及解决措施:函数可以申明为const类型,

    45、通常都是一些没有修改成员变量的函数会有这类告警PC-Lint常见告警分析及解决措施告警号告警号:1774 告警等级告警等级:3告警消息样例告警消息样例:XXX.cpp(188):error 1774:(Info-Could use dynamic_cast to downcast polymorphic type IBase)分析及解决措施分析及解决措施:在这里主要是LoadPlugin()函数本来返回值类型是IBase*,但把它转换成IPlugin*后是使用强制转换,没有使用dynamic_cast转换PC-Lint常见告警分析及解决措施告警号告警号:1776 告警等级告警等级:3告警消息样例告警消息样例:XXX.cpp(198):error 1776:(Info-Converting a string literal to signed char*is not const safe(arg.no.4)#._Malloc,(const char*)_FILE_,_LINE_)分析及解决措施分析及解决措施:主要是参数可以申明为const造成,象_FILE_前可以加(const char*)进行转换,并且对应的VOS_Malloc()函数定义时需要将参数定义为const char*类型

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:代码走查工具PCLint课件.ppt
    链接地址:https://www.163wenku.com/p-5003502.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库