精华内容
下载资源
问答
  • 2021-05-15 16:27:13

    这个插件只是分析已经生成的报告,并非去检查代码,比如配置的规则中有cppcheck库的,那么运行sonar-runner时只会读取你用cppcheck检查后生成的问题报告######

    我也遇到过同样的问题,我是这样解决的:

    1、要先安装cppcheck工具。安装命令如下:

    make SRCDIR=build CFGDIR=/usr/bin/cfg HAVE_RULES=yes

    make install CFGDIR=/usr/bin/cfg

    2、在需要分析的项目里面执行“

    cppcheck -j 1 --enable=all --xml ./src/* 1>cppcheck-result-1.xml 2>&1”生成一个xml文件

    3、编辑sonar-project.properties配置文件,加入

    sonar.cxx.cppcheck.reportPath=cppcheck-result-1.xml sonar.cxx.includeDirectories=/usr/include/

    4、最后执行sonar-runner 分析。

    但是我觉得使用cppcheck插件分析的结果不够好,请教一下各位高手,还有没有更好的解决方法。

    另外 Valgrind /PC-lint/RATS /Vera++ 等插件要怎么与sonarqube使用?

    ######你好,想请问下用这个工具扫C++代码的具体步骤是怎样的???或者哪里有教程??######

    引用来自“mm3b712”的评论

    我也遇到过同样的问题,我是这样解决的:

    1、要先安装cppcheck工具。安装命令如下:

    make SRCDIR=build CFGDIR=/usr/bin/cfg HAVE_RULES=yes

    make install CFGDIR=/usr/bin/cfg

    2、在需要分析的项目里面执行“

    cppcheck -j 1 --enable=all --xml ./src/* 1>cppcheck-result-1.xml 2>&1”生成一个xml文件

    3、编辑sonar-project.properties配置文件,加入

    sonar.cxx.cppcheck.reportPath=cppcheck-result-1.xml sonar.cxx.includeDirectories=/usr/include/

    4、最后执行sonar-runner 分析。

    但是我觉得使用cppcheck插件分析的结果不够好,请教一下各位高手,还有没有更好的解决方法。

    另外 Valgrind /PC-lint/RATS /Vera++ 等插件要怎么与sonarqube使用?

    @mm3b712看了demo项目,也是引用下面的参数sonar.cxx.cppcheck.reportPath=build/cppcheck-report.xml

    sonar.cxx.pclint.reportPath=build/pclint-report.xml sonar.cxx.coverage.reportPath=build/gcovr-report*.xml

    sonar.cxx.coverage.itReportPath=build/gcovr-report*.xml

    sonar.cxx.coverage.overallReportPath=build/gcovr-report*.xml

    sonar.cxx.valgrind.reportPath=build/valgrind-report.xml

    sonar.cxx.vera.reportPath=build/vera++-report.xml

    sonar.cxx.rats.reportPath=build/rats-report.xml

    sonar.cxx.xunit.reportPath=build/xunit-report.xml

    ######

    make SRCDIR=build CFGDIR=/usr/bin/cfg HAVE_RULES=yes

    make install CFGDIR=/usr/bin/cfg

    通过这两句 看着像Linux系统下,请问windows系统下该怎么办,我也遇到了同样的问题。

    更多相关内容
  • PCLint错误码解析.pdf

    2021-02-03 17:03:17
    PCLint是 GIMPELSOFTWARE 公司研发的 C/C++ 软件代码静态分析工具,可以说,PCLint 是一种更加严格的编译器。其主要分为 PCLint 和 FlexeLint,PCLint 主要应用于 Windows 平台,以二进制可执行文件提供,而 ...
  • PC-Lint错误码,用于查询对应错误
  • PCLint错误码解析.MD

    2021-02-03 17:00:15
    PCLint是 GIMPELSOFTWARE 公司研发的 C/C++ 软件代码静态分析工具,可以说,PCLint 是一种更加严格的编译器。其主要分为 PCLint 和 FlexeLint,PCLint 主要应用于 Windows 平台,以二进制可执行文件提供,而 ...
  • 注意,在win7x64下测试成功 PCLINT9.0L是2014年更新的. PCLINT9.0,32位及64位系统皆可用,其中32位包含9.0L版升级包,64位包含9.0I升级包。使用方法可参考http://blog.csdn.net/finewind/article/details/43482797
  • PClint错误码大全

    2017-09-21 17:19:30
    PC-Lint错误码解释文档整理word版,网上找了一份,但下载的内容有些问题(下载不全,乱码等),遂把它整理了一遍(仍有翻译不全的,只有英文解释)
  • pclint9.0l补丁

    2017-11-08 16:47:33
    PCLINT9.0,32位及64位系统皆可用,其中32位包含9.0J版升级包,64位包含9.0I升级包。使用方法可参考http://blog.csdn.net/finewind/article/details/43482797
  • IAR中配置PCLint教程

    2017-11-06 20:42:20
    资料中有pclint9.0,且自己参考了二个英文手册,写出了详细的配置IAR中配置PClint的教程
  • pclint学习资料.zip

    2021-04-21 10:07:22
    适合需要使用PC-lint做代码检查的人,目前PC-lint(L)最高支持VS2013
  • 由于公司的工作要求,专门写了个pclint的使用方式,source insight环境下怎么调用pclint。上传到csdn,分享给大家
  • pclint9.0i破解版

    热门讨论 2015-02-05 20:14:22
    PCLINT9.0,32位及64位系统皆可用,其中32位包含9.0J版升级包,64位包含9.0I升级包。使用方法可参考http://blog.csdn.net/finewind/article/details/43482797
  • pclint报告

    2018-06-26 12:11:36
    PC-lint配合C/C++编译器可以发现C和C++程序中的错误、告警等等。PC-lint在于发现这些程序中的在集成前的潜在的问题,揭示可能包含敏感的、未检测到的错误的不寻常的结构。因为它寻找几个模块而不仅仅是一个,它...
  • 实验一_pclint_visualc++_

    2021-10-03 04:03:11
    利用PCLIENT对程序代码进行检查,检查代码潜在的错误
  • PCLint9.00j-最新版PCLint

    热门讨论 2013-03-10 17:09:29
    附件中为最新版PCLint9.00j,官方网站更新日期为2013年1月3日。附件的使用说明中给出了安装方法的网址,本人主要也是参考结合了网上两种安装方法。使用的开发工具为VS2008SP1,安装后亲测可用,请放心下载~~
  • pclint.rar

    2020-09-25 14:02:21
    PC-Lint C/C++编译神器,可嵌入VS、Source Insight、Keil等等IDE中。对C/C++代码中的错误、警告甚至可优化语句给出提示,功能强大。
  • 代码静态检查之pclint

    2022-02-14 14:11:46
    一、pclint 简介 pc_lint是GIMPEL SOFTWARE公司开发的C/C++软件代码静态分析工具,它的全称是PC-Lint/FlexeLint for C/C++, pc_lint能够在Windows、MS-DOS和OS/2平台上使用,以二进制可执行文件的形式发布,而...

    一、pclint 简介

    pc_lint是GIMPEL SOFTWARE公司开发的C/C++软件代码静态分析工具,它的全称是PC-Lint/FlexeLint for C/C++, pc_lint能够在Windows、MS-DOS和OS/2平台上使用,以二进制可执行文件的形式发布,而FlexeLint 运行于其它平台,以源代码的形式发布。pc_lint不仅能够对程序进行全局分析,识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针以及冗余的代码,还能够有效地帮你提出许多程序在空间利用、运行效率上的改进点。从某种意义上说。 pc_lint是一种更加严格的编译器,它除了可以检查出一般的语法错误外,还可以检查出那些虽然符合语法要求,但很可能是潜在的、不易发现的错误。

    功能

    1、pc_lint不仅能够对程序进行全局分析,识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针以及冗余的代码,还能够有效地帮你提出许多程序在空间利用、运行效率上的改进点。从某种意义上说。 pc_lint是一种更加严格的编译器,它除了可以检查出一般的语法错误外,还可以检查出那些虽然符合语法要求,但很可能是潜在的、不易发现的错误。
    
    2、PC-lint不但可以检测单个文件,也可以从整个项目的角度来检测问题,因为C/C++语言编译器固有的单个编译,这些问题在编译器环境下很难被检测,而PC-Lint在检查当前文件的同时还会检查所有与之相关的文件,可想而知,它会对我们有很大的帮助。
    
    3、PC-lint支持几乎所有流行的编辑环境和编译器,比如Borland C++从1.x到5.x各个版本、Borland C++ Build、GCC、VC,VC.net、watcom C/C++、Source insight、intel C/C++等等,也支持16/32/64的平台环境。
    
    4、支持Scott Meyes的名著(Effective C++/More Effective C++)中说描述的各种提高效率和防止错误的方法。
    
    5、PC-Lint 为大部分错误消息都分配了一个错误号,编号小于1000的错误号是分配给C 语言的,编号大于1000的错误号则用来说明C++的错误消息
    以C语言为例
    其中的编号1-199指的是一般编译器也会产生的语法错误;
    编号200-299是PC-Lint 程序内部的错误,这类错误不会出现在代码中的;
    编号300-399指的是由于内存限制等导致的系统致命错误。
    编号400-999中出现的提示信息,是根据隐藏代码问题的可能性进行分类的:
    其中编号400-699 指的是被检查代码中很可能存在问题而产生的告警信息;
    编号700-899中出现的信息,产生错误的可能性相比告警信息来说级别要低,但仍然可能是因为代码问题导致的问题。
    编号900-999 是可选信息,他们不会被默认检查,除非你在选项中指定检查他们。
    

    二、pclint安装配置

    2.1、压缩包安装

    将压缩包比如PC.Lint.v8.00e.zip解压到某个目录下,比如X:/develop/PC.Lint.v8.00e,即可使用;为了后续设置的方便,可以设置PC-Lint的环境变量:右击“我的电脑”,选择“属性”,通过“系统属性–>高级–>环境变量”设置系统变量PCLINT_ROOT为X:/develop/PC.Lint.v8.00e。

    2.2、将PC-lint集成到VC6.0

    (1)将D:/PC-Lint/lnt 下的3个文件lib-w32.lnt,env-vc6.lnt,co-msc60.lnt复制到D:/PC-Lint/下。
    (2)打开co-msc60.lnt,将该文件倒数第二行"lib-ole.lnt"的内容改为"D:/PC-Lint/lnt/lib-ole.lnt",也就是在前面加上绝对路径,以免在后面的步骤中无法找到该文件。
    (3)在D:/PC-Lint/下创建std.lnt和options.lnt两个文件,其中std.lnt的内容如下::-i后面的路径名为VC 6.0的安装路径和及其头文件路径;options.lnt可以暂时为空。
    (4)在VC6.0的菜单栏中,Tools--->Customize...-->tools 新建一个名为pclint的项,在下面填入
    "Command"项填入: D:/PC-Lint/lint-nt.exe
    "Argument"项填入: -u D:/PC-Lint/std.lnt  D:/PC-Lint/env-vc6.lnt "$(FilePath)"
    
    然后在Use Output Window 打上勾即可。
    (5)在VC6.0的菜单栏Tools下多了一个pclint选项,打开一个VC项目后,就可以使用该选项对单个C/C++文件进行静态代码分析了
    
    ##对一个VC6.0项目进行静态代码分析
    (1)先到http://www.weihenstephan.de/~syring/win32/UnxUtils.zip下载UnxUtils.zip。需要利用unix中的find等命令来查找当前目录下的C和C++文件,然后再将它们送给lint程序处理。
    (2)解压UnxUtils.zip到D盘,这样路径为D:/UnxUtils。
    (3)在在VC6.0的菜单栏Tools下多了一个pclint_prj选项,打开一个VC项目后,就可以使用该选项对单个C/C++文件进行静态代码分析了。
    "Command"项填入: D:/UnxUtils/usr/local/wbin/find.exe
    "Argument"项填入: $(FileDir) -name *.c -o -name *.cpp | D:/UnxUtils/usr/local/wbin/xargs D:/PC-Lint/lint-nt -i"D:/UnxUtils/usr/local" -u D:/PC-Lint/std.lnt D:/PC-Lint/env-vc6.lnt
    
    然后在Use Output Window 打上勾即可。
    (4)在VC6.0的菜单栏Tools下多了一个pclint_prj选项,打开一个VC项目后,就可以使用该选项对VC项目进行静态代码分析了。
    注意:"Argument"项填的内容一定要注意参数中的路径,如果你不使用上述路径,可以用新路径将参数中的路径替换,以免重新写参数而导致出错。
    

    2.3、将PC-lint集成到Source Insight 3.5中

    (1)打开SourceInsight, 选择Options-->Custom Commands-->Add, 输入pclint
    (2)在Run中填写: D:/PC-Lint/lint-nt -u D:/PC-Lint/std.lnt D:/PC-Lint/env-vc6.lnt %f
    (3)Dir不用填写,将Iconic Window, Capture Output, Parse Links in OutPut,三项勾选上,并将File,then Line的单项选择也选上。
    (4)然后点右侧的Menu...,在弹出的界面中在下拉框Menu中选择View,然后在下面的Menu Cotents中选择<end of menu>, 右侧点Insert即可。
    (5)可以在Source Insight 3.5菜单View下看到刚才新建的项pclint,打开项目的任意一个待分析的源文件,运行pclint即可进行静态代码分析了。
    
    ##对一个项目进行静态代码分析
    (1)打开SourceInsight, 选择Options-->Custom Commands-->Add, 输入pclint_prj
    (2)在Run中填写:
    D:/UnxUtils/usr/local/wbin/find.exe %d -name *.c -o -name *.cpp | D:/UnxUtils/usr/local/wbin/xargs D:/PC-Lint/lint-nt -i"D:/UnxUtils/usr/local" -u D:/PC-Lint/std.lnt D:/PC-Lint/env-vc6.lnt
    (3)Dir不用填写,将Iconic Window, Capture Output, Parse Links in OutPut,三项勾选上,并将File,then Line的单项选择也选上。
    (4)然后点右侧的Menu...,在弹出的界面中在下拉框Menu中选择View,然后在下面的Menu Cotents中选择<end of menu>, 右侧点Insert即可。
    (5)可以在Source Insight 3.5菜单View下看到刚才新建的项pclint_prj,打开项目,运行pclint_prj即可对项目进行静态代码分析了。
    

    2.4、pc-lint目录下几个重要的文件及程序

    lint-nt.exe:PC-lint的可执行程序。
    config.exe: PC-lint的配置文件程序。
    pc-lint.pdf:PC-lint的PDF格式的在线手册,本文的大部分内容是从中得来的。
    msg.txt:     对于错误消息编号的详细解释。
    Lnt/:       这个目录下有些东西还是值得认识一下。
    co-....lnt: 指定的编译器的可选编译文件。
    co.lnt:     通用的可选编译文件。
    sl-....c     非ANSI编译器的标准库文件模块
    sl.c:        非ANSI编译器的通用标准库文件模块
    env-....lnt:不同平台下的可选文件,包括MS Visual Studio和其他各种编辑工具。
    lib-....lnt:可选文件, 特定的"有挑战性"的库文件。
    au-....lnt: 可选文件, 作者们推荐的检测条件。
    

    三、pclint的选项

    3.1、错误信息编号

    对于大部分的错误消息,PC-lint都提供了一个关联的错误编号。小于1000的错误编号是分配给C语言的,1000以上的错误编号则是分配给C++语言的。

    错误信息CC++告警级别
    语法错误(Syntax Errors)1 - 1991001 - 11991
    内部错误(Internal Errors)200 - 2990
    致命错误(Fatal Errors)200 - 2990
    告警(Warnings)200 - 2991400 - 16992
    提示(Informational)700 - 8991700 - 18993
    可选信息(Elective Notes)900 - 9991900 - 19994

    对于C语言,1199是与语法错误;200299是PC-lint内部错误,应该决不会发生的;300399是致命错误,通常是由于超越了某些限制;400699是警告消息,提示被检查的程序中可能存在错误;700899是提示信息,这些提示信息可能有错误,也可能是合法的程序,取决于个人的编程风格;900999则是一些称为可选信息,一般不会自动输出。

    PC-lint提供了高级级别设置选项-wLevel,缺省的级别为3级。-w0, -w1 , -w2, -w3, -w4 分别可以生成上述表格中对应告警级别和级别更低的告警,其中级别越低告警越重要。同样,也提供了处理库函数的头文件告警级别的选项-wlib(Level),缺省的级别也是3级,级别对应的含义与前者一样。

    3.2、选项的规则

    通过使用加号"+"和减号"-",以注释的形式插入代码中,来恢复和屏蔽指定的被检查的选项。格式如下:
    /*lint option1 option2 ... optional commentary */
    或者
    //lint option1 option2 ... optional commentary
    注意:lint必须是小写,选项的一行不能超过80个字符,否则导致致命的错误,错误信息的编号就是323。如果选项确实有很长,可以通过换行的方式来实现。另外屏蔽和恢复的选项的代码可以放在宏定义中,宏被展开后,这些选项会生效。
    

    3.3、选项中的空格

    因为空格是用来分隔选项的,除此之外只能出现在圆括号的旁边或是空格自身被引用(例如operator new按语法要求中间就有空格)。举个例子:
    -esym(534,printf,scanf,operator new)
    -esym(534, printf, scanf, operator new)
    -esym( 534 , printf , scanf , operator new )
    对于第三个,空格出现在圆括号的旁边,也出现在自身被引用的地方(operator new)。另外operator和new之间出现两个空格也是不合法的,因为它违反了语法规则。另外,也可以使用双引号("")来保护空格,例如:
    -"dWORD=unsigned short"
    

    3.4、选项的分类

    PC-lint的选项有300多种,可以分为下面几类:

    3.4.1、禁止错误信息

    选项开头使用"-e"可以禁止指定的错误消息,使用"+e"恢复指定的错误消息。如果禁止消息,只不过不让消息输出,并不影响PC-lint的处理过程。顺便提一下前面提到的"-wLevl",这个选项是禁用指定级别及以上的消息的显示。
    
    1、格式一:
    -e#  禁止指定的错误消息,#代表数字或是数字匹配符,错误消息的编号为#。
    +e#  恢复指定的错误消息,错误消息的编号为#。
    
    举个例子:
    /*lint -504*/
    ...Code.....
    /*lint +504*/
    第一行关闭了编号为504的错误消息,最后一个行则重新打开了编号为504的错误消息。其中数字也可以包含匹配符号,'?'匹配单个字符,"*"匹配多个字符。
    比如:
    (1)-e7???, 则关闭了700~799这个范围内的错误消息。
    (2)-e1*, 则关闭了所有以1开头的编号的错误消息。
    同样匹配符也能使用在-esym, -elib, -elibsym, -efile, -efunc, -emacro, -etemplate, -e(#), --e(#), -e{#} and –e{#}.
    
    2、格式二:
    -e(#[,#]...) 为下一个表达式禁止指定的错误消息,在这个表达式结束后被禁止的错误消息自动恢复,#代表数字或是数字匹配符,错误消息的编号为#。
    举个例子:
    a = /*lint -e(413) */ *(char *)0;
    它等价于下面的语句:
    a = /*lint -save -e413 */ *(char *)0
    /*lint -restore */;
    前一种方法更简单且更有效。
    
    3、格式三:
    --e( # [,#]... ) 比上面的那个管的更宽一些,它对整个表达式有效,举个例子就明白它与上面的区别了。
    举个例子:
    a = /*lint --e(413) */ *(int *)0 + *(char *)0;
    整个表示式是指*(int *)0 + *(char *)0,下个一表达式指的是*(int *)0。区别一目了然,例子中将禁止两个编号为413 的错误消息, 如果使用 -e(413) ,则只禁止第一个编号为 413 的错误消息。
    
    4、格式四:
    -e{ # [, #]} 对下一个语句或者声明有效
    举个例子:
    //lint -e{715} suppress "k not referenced"
    void f( int n, unsigned u, int k )
    {
        //lint -e{732} suppress "loss of sign"
        u = n; // 732 not issued
        //lint -e{713} suppress "loss of precision"
        if(n)
       {
           n = u; // 713 not issued
       }
    } // 715 not issued
    通过例子可以看出,这种格式放在函数之前,则对整个函数产生作用,放在赋值语句前则只对赋值语句起作用,放在ifwhile前面,则对这一段语句起作用。在C++的类定义或命名空间声明前放这么个选项,则将整个类或命名空间内的代码中指定的错误消息给禁止了。
    
    5、格式五:
    --e{ # [, #]} 对于其所处的 {} 号区域内的整个代码体有效。 {} 号区域可能是复杂的语句、函数体、C++的类,结构体或联合体的定义、C++的命名空间等。如果这个选项放在一个模块前,而模块前没有 {},则对整个模块生效。
    
    6、格式六:
    !e# 仅对其所在行有效。
    if( x = f(34) ) //lint !e720
    y = y / x;
    在这个例子中,仅对那一行禁止编号为720 的错误消息。看一下C语言的代码的用法:
    if( x = f(34) ) /*lint !e720 */
    y = y / x;
    如果有更多的错误信息要禁止,而又无法使用通配符,则可以使用下面的方法:
    n = u / -1; //lint !e573 !e721
    
    7、格式七:
    -ealetter 参数不匹配禁止
    
    8、格式八:
    -efile( #, file [, file] ... ) inhibits and
    +efile( #, file [, file] ... ) re-enables
    
    9、格式九:
    -efunc( #, Symbol [, Symbol] ... ) inhibits and
    +efunc( #, Symbol [, Symbol] ... ) re-enables
    
    10、格式十:
    -elib( # [, #] ... ) inhibits and
    +elib( # [, #] ... ) re-enables
    
    11、格式十一:
    -elibsym( # [, # ] ... ) inhibits
    +elibsym( # [, # ] ... ) re-enables
    
    12、格式十二:
    -emacro( #, symbol, ... )
    +emacro( #, symbol, ... )
    
    13、格式十三:
    -emacro( (#), symbol, ... )
    --emacro( (#), symbol, ... )
    -emacro( {#}, symbol,)
    --emacro( {#}, symbol,)
    
    14、格式十四:
    -esym( #, Symbol [, Symbol] ... ) inhibits and
    +esym( #, Symbol [, Symbol] ... ) re-enables
    禁止和恢复指定的符号的错误消息。举个C++的例子(实际应用中不太可能出现):
    class X
    {
        void f(double, int);
    };
    分析结果中会提示某行的member X::f(double, int)没有被引用,为了屏蔽这个消息,你可以使用
    -esym( 754, X::f )
    符号的完整签名为X::f(double, int),然而符号的名字为X::f,而且可以使用符号的名字来禁止错误消息的出现。另外,-esym 和 -e# 选项是独立的,举个例子:
    -e714 +esym( 714,alpha )
    对于alpha来说,它禁止了编号为714的错误消息,第二个选项并不会恢复编号为714的错误消息,除非前面有个对应的-esym(714,alpha)15、格式十五:
    -etd( TypeDiff [, ...] ) inhibits
    +etd( TypeDiff [, ...] ) re-enables
    
    16、格式十六:
    -etemplate( # [,#] ... )
    +etemplate( # [,#] ... )
    禁止和恢复在扩展模板(expanding templates)时的错误消息。
    

    3.4.2、变量类型大小和对齐选项

    1、变量类型大小选项
    这组选项允许设置各种变量类型的大小和对齐方式。由于默认的设置于绝大多数的编译器都是一致的,所以这些参数的单独设置通常是没有必要的。使用变量类型大小的选项是为了特定的架构,而不是本地架构。举个例子,你需要为嵌入式系统设置int和pointers通常为16位,那么你应该指定:
    lint -si2 -sp2 ...
    下面的列表,#号代表一个小的整型值,仅举几个:
    -sb# 字节的位数为#,默认的是-sb8,
    -sbo# sizeof(bool)就变为一个参数了,默认值为1-sc# sizeof(char) 就变为 #,默认值为1-slc# sizeof(long char) 就变为 #,默认值为2...
      
    2、对齐选项
    仅有两个可选择的注释信息来检测不规律的对齐,它们的错误编号是958959,详细的介绍就省略了吧。
    
    3、冗长信息选项
    冗长信息选项采用-v和+v开头来控制,冗长信息指的是在检测过程中产生的一些与编译过程有关的信息,或者说,冗长信息与编译过程中消息的频率和种类有关。如果使用-v,则冗长信息进被发送到标准输出,而是用+v,冗长信息进则会被发送到标准输出和标准错误中。如果要将错误信息重定向到一个文件中,并想要在终端查看冗长信息和被解释后的错误消息,+v选项是非常有用的。
    
    4、标志选项
    采用+f,++f,-f,--f开头开介绍标志位。一个标志位在内部采用一个整型值表达。通过认为:
    ON  假如整型值大于0
    OFF 假如整型值小于或等于0
    默认设置时1为ON,0为off,对于的关系如下:
    +f...:通过把标志为设置为1而把它设置为ON
    -f...:通过把标志为设置为0而把它设置为OFF
    ++f...:标志位增1
    --f...:标志位减1
    后面两个选项在只设置局部标志而不影响全局设置时,非常有用。
    
    5、消息显示选项
    消息显示选项用于定义消息输出的格式。
    1)控制错误消息的高度。
    -h选项被用来控制消息的高度,通常的格式如下:
    -h[s][F][f][a][b][r][mn][m][m/M/][I]N
    s 表示每条消息后的空格。其他的就不介绍了。
    2)控制错误消息的宽度。
    格式如下:
    -width(W,Indent)
    例如:-width(99,4)
    3)消息格式化选项
    格式如下
    -format=...
    3)附加信息选项
    格式如下:
    -append(errno,string)
    6、其他选项
    1)-A 要求严格使用ANSI C/C++处理。
    其他的不介绍了。
    

    3.5、库文件检查

    这里的库文件时指那些编译后的库文件,比如标准的I/O库,又比如第三方的库文件,例如windows的库文件。关注库文件的重要特色是因为以下两点:

    (1)库文件的源代码通常不可获得。
    (2)库文件在多个正被你使用pc-lint检查的程序中使用
    

    库的头文件描述了库的部分或完整的接口。举个例子:

    hello.c
    #include <stdio.h>
    main()
    {
        HelloWorld();
        printf( "hello world/n" );
    }
    
    如果没有"#include <stdio.h>"这一行代码,使用PC-lint检查上述代码,PC-lint会抱怨printf()既没有声明也没有定义,会给出编号为718错误信息。如果"stdio.h"被当做一个库文件的头文件,那么PC-lint不会要求给出printf()的源代码。
    
    (1)格式一:
    +libclass( identifier[, identifier] ... )
    用来指定名为identifier的头文件当做库头文件。identifier是其中下面之一:
    angle: 所有尖括号包含起来的头文件
    foreign:所有在搜索列表中目录下的头文件
    ansi:标准ANSI C/C++ 的头文件
    all:所有头文件
    默认情况下,+libclass(angle,foreign) 是有效的,这也是为什么hello.c的代码没有要求给出printf()源代码的原因。
      
    (2)格式二:
    +libdir( directory [, directory] ... )
    -libdir( directory [, directory] ... )
    指定目录的。
      
    (3)格式三:
    +libh( file [, file] ... )
    -libh( file [, file] ... )
    增加或移出那些已经被 +libclass 和 +/-libdir 已确定的头文件,以达到要求或不要求给出源代码。举个例子:
    +libclass( ansi, angle )
    +libh( windows.h, graphics.h )
    +libh( os.h ) -libh( float.h )
    要求所有的ansi和angle(除了float.h),还有那三个windows.h, graphics.h, os.h也会被当做库头文件。
    

    3.6、强类型检查

    什么是强类型?C/C++的变量都有类型,不同类型之间的赋值可能会产生告警,可以说C/C++变量的类型是强类型。有强类型,自然有弱类型。比如一些脚本语言,它们的变量就不存在具体的类型,可以相互之间赋值,它们就是弱类型语言。为什么在使用PC-lint对C/C++进行检查时,要进行强类型检查呢?因为有诸如使用typedef定义的数据类型,可以避开编译器的类型检查。举个例子:

    typedef int Count;
    typedef int Bool;
    Count n;
    Bool stop;
    ...
    n = stop ;
    

    对于这段代码,编译器是不会告警的,但是最后一行代码是错误的。所以,强类型检查选项是必要的。
    强类型检查选项"-strong"和附加选项"-index"可以完全的或部分的对typedef定义的数据类型进行强类型检查,保证相同类型的变量才能相互赋值。
    3.6.1、强类型检查选项strong的格式如下:

    -strong( flags[, name] … )
    name是强类型,flags是指定的属性,flags参数可以是A、J、X、B、b、l和f。如果name被省略,所有使用typedef定义的数据类型的flags的属性不能被其他的-strong选项所识别。

    A对强类型变量赋值时进行类型检查,这些赋值语句包括:直接赋值、返回值、参数传递、初始化 。 A参数后面可以跟以下字符,用来弱化A的检查强度: i 忽略初始化 r 忽略Return语句 p 忽略参数传递 a 忽略赋值操作 c 忽略将常量赋值(包括整数常量、常量字符串等)给强类型的情况 z 忽略Zero赋值,Zero定义为任何非强制转换为强类型的0常量。例如:0L和(int)0都是Zero, 但是(HANDLE)0当HANDLE是一个强类型的时候就不是Zero。(HANDLE *)0也不是例如使用-strong(Ai,BITS)设置,PC-Lint将会对从非BITS类型数据向BITS类型数据赋值的代码发出告警,但是忽略 变量初始化时的此类赋值。
    X当把强类型的变量赋指给其他变量的时候进行类型检查。弱化参数i, r, p, a, c, z同样适用于X并起相同的作用。
    J选项是当强类型与其它类型进行如下的二进制操作时进行检查,下面是J的参数: e 忽略==、!=和?:操作符 r 忽略>、>=、<和<= o 忽略+、-、*、/、%、|、&和^ c 忽略该强类型与常量进行以上操作时的检查 z 忽略该强类型与Zero进行以上操作时的检查使用忽略意味着不会产生告警信息。举个例子,如果Meters是个强类型,那么它只在判断相等和其他关系操作时才会被正确地检查,其它情况则不检查,在这个例子中使用J选项是正确的。
    BB选项有两个效果: 1. 出于强类型检查的目的,假设所有的Boolean操作返回一个和Type兼容的类型,所谓Boolean操作就是那些指示结果为true或false的操 作,包括前面提到的四种关系运算符和两种等于判断符,取反操作符!,二元操作符&&和||。 2. 在所有需要判断Bolean值的地方,如if语句和while语句,都要检查结果是否符合这个强类型,否则告警。 例如if(a)…当a为int时,将产生告警,因为int与Bolean类不兼容,所以必须改为if(a != 0)。
    b仅仅假定每一个Bolean类操作符都将返回一个与Type类型兼容的返回值。与B选项相比,b选项的限制比较宽松。
    l库标志,当强类型的值作为参数传递给库函数等情况下,不产生告警。
    f与B或b连用,表示抑止对1bit长度的位域是Boolean类型的假定,如果不选该项表示1bit长度的位域被缺省假定为Boolean类型。

    这些选项顺序对功能没有影响,但是A和J选项的弱化字符必须紧跟在它们之后。B选项和b选项不能同时使用,f选项必须搭配B选项或b选项使用,如果不指定这些选项,-strong的作用就是仅仅声明type为强类型而不作任何检查。下面用一段代码演示-strong选项的用法:

    //lint -strong(Ab,Bool) <选项是以注释的形式插入代码中>
    typedef int Bool;
    Bool gt(int a, b)
    {
        if(a) return a > b; // OK
        else return 0; // Warning
    }
    

    代码中,Bool被声明成强类型,如果没有指定b选项,第一个return语句中的比较操作就会被认为与函数类型不匹配。第二个return语句导致告警是因为0不是Bool类型,如果添加c选项,例如-strong(Acb,Bool),这个告警就会被禁止。

    3.6.2、另一个强类型检查选项是index,格式如下:

    -index( flags, ixtype, sitype [, sitype] ... )
    这个选项是对strong选项的补充,它可以和-strong选项一起使用。这个选项指定ixtype是一个排他的索引类型,它可以和强索引类型sitype的数组(或指针)一起使用,ixtype和sitype被假定为后来使用typedef声明来定义的的类型名称。flags可以是c或d,c允许将ixtype和常量作为索引使用,而d允许在不使用ixtype的情况下指定数组的维数(Dimensions)

    四、PC-Lint排错建议

    PC-Lint在代码走读和单元测试之前进行检查,以便提前发现程序隐藏错误,提高代码质量,节省测试时间,规范编码行为。
    新开发的代码必须使用PC-Lint进行检查,修改的代码涉及到的文件也需要使用PC-Lint进行检查。
    对于Warning及Warning级别以上的错误,存在安全的隐患,是一定得解决的。对于确实无法解决,有充分理由证明代码没问题的,可以通过注释的方式进行屏蔽,并在质量文档中进行记录。
    对于Info级别的错误,是对程序优化的建议,建议尽量解决,但不强制。
    

    五、参考文档

    1、https://www.cnblogs.com/zhoug2020/p/5030617.html

    2、https://blog.csdn.net/lbqBraveheart/article/details/5602391

    3、https://www.cnblogs.com/cevinchen/p/9839851.html

    4、https://www.cnblogs.com/haosk/p/13283327.html

    5、https://blog.csdn.net/scucj/article/details/4409735

    展开全文
  • pc lint 9L

    2017-12-14 19:17:37
    pc lint 最新版本 9L,含pc lint 9a安装包,a至L的所有升级文件及脚本。win7 64位系统亲测可用。
  • pclint集成source insight

    2018-05-14 16:02:50
    pclint代码静态检查工具,支持和source insight集成在一块,大大提高开发效率,减少代码bug
  • pc lint是GIMPEL SOFTWARE公司开发的C/C++软件代码静态分析工具,它的全称是PC-Lint/FlexeLint for C/C++,PC-Lint 能够在Windows、MS-DOS和OS/2平台上使用,以二进制可执行文件的形式发布,而FlexeLint 运行于其它...
  • PClint 9.0破解版压缩包

    2018-03-16 13:47:47
    pclint9.0破解版,可以用来自动检测c编程中的问题,是一个开发工具类
  • VC6.0环境下配置PCLINT为内嵌工具
  • VC6.0和SourceInsight下的pclint配置,具体步骤见文章:http://blog.csdn.net/dyx1024/article/details/38807059
  • PClint错误码大全要点 养成良好的编码习惯
  • pclint 9.0版本的白盒测试工具,主要进行代码静态检查时使用
  • pclint设置 | 学步园

    2021-03-13 07:33:33
    pclint是一个检查c代码语法的工具,功能异常强劲的静态代码检测工具,功能比编译器的警告功能强很多,用好pclint可以减少很多bug。现在介绍下如何在VC和sourceinsight中集成pclint.安装和通常的软件没有什么不同。...

    pclint是一个检查c代码语法的工具,功能异常强劲的静态代码检测工具,功能比编译器的警告功能强很多,用好pclint可以减少很多bug。

    现在介绍下如何在VC和sourceinsight中集成pclint.

    安装和通常的软件没有什么不同。安装结束后在PC-Lint安装目录下运行CONFIG.exe,各项设置简要解释如下:

    第一步: 安装配置pclint

    a) 第一步,给出PC-Lint的安装路径和选择设置的保存文件。

    b) 第二步,选择你所使用的C/C++编译器:比如Visual C++ 6.x。

    c) 第三步,选择内存模式:比如32 bit Flat Model。

    d) 第四步,选择所使用的库:比如MFC,OWL,等,可多选,在windows下开发的一般要选中windows 32 bit。

    e) 第五步,C++编程提出过重要建议的作者,选择某作者后,他提出的编程建议方面的选项将被打开:比如Scott  Meyers,可不选。

    f) 第六步,头文件的设置:可在后面步骤中手工添加。

    第二步:整合PC-Lint到选定的编译环境

    当你在上述第二步中选择了编译器后,可以在PC-Lint目录下找到一个"env-选用的编辑环境.lnt"文件,比如对于Source insight 是env-si.lnt,对于vc6是env-vc6.lnt。

    打开此文件,根据上面的描述,配置你的编译器,下面以VC6为例:

    ·选取菜单 tools | customize.....

    ·选取 Tools 标签

    ·点按主对话框上方的虚线小方框 New

    ·输入 name: PC-LINT

    ·输入 Command: c:/lint/lint-nt.exe,假设安装到此路径

    ·输入 Arguments: c:/lint/std.lnt ?(FilePath)?7)选择 (x) Use Output Window

    ·Close

    第三步:Lint单个C文件

    a) 打开一个C文件

    b) 运行第二步集成上的PC-Lint菜单项

    c) LINT结果会在一两秒之内出来。告警的解释可参考LINT安装目录下MSG.TXT或pdf文件文件,打开文件,通过查找告警号码定位,就可以看到比较详细的说明。

    第四步:Lint多个C文件

    a) 在LINT软件目录下建立PRJLINT.LNT文件,文件的第一行是使用的LINT配置文件名,从第二行开始,列出想所有要LINT的*.C文件名,一行一个。如果要把结果输出到文件,

    在前面加上一行"-os(文件名)"(例如:"-os(c:/lint/result.txt)")。样例:YF_Config.lnt

    // 以下为自己想要进行Lint的.C文件,

    G:/src/tt/tt1.c

    G:/src/tt/tt2.c

    b) 用第二步介绍的方法在Source Insight"中介绍的方法增加一条"PC-LINT PROJECT"命令,所有设置与"PC-LINT"设置相同,除了

    ①"Custom Commands"对话框中"RUN"编辑框的文字由"C:/LINT/LINT-NT.EXE filename.lnt %f"改为"C:/LINT/LINT-NT.EXE PRJLINT.LINT",也就是把配置文件名改为PRJLINT.LNT,并去掉未尾的"%f"

    ②设置的快捷键与PC-LINT要区别开来

    利用下面的DOS命令可以用来得到一堆*.C文件的清单。例如:

    ① 列出C:/SRC下所有*.C文件,并保存到C:/SRC/FILELIST.TXT:

    DIR C:/SRC/*.C /B >C:/SRC/FILELIST.TXT

    ② 列出C:/SRC下,包括SRC的子目录下的所有的*.C文件,,并添加到C:/SRC/FILELIST.TXT的未尾:

    DIR C:/SRC/*.C /S/B >>C:/SRC/FILELIST.TXT

    PC-Lint 重要文件说明

    Msg.txt :解释告警的内容。

    选用的.lnt :包含头文件的路径,-i选项。

    env-选用的编辑环境.lnt :讲述如何将PC-lint与对应的编辑环境结合起来。

    co-xxx.lnt :选定的编译器。

    STD.LNT :内存模型等全局性东西。

    LIB-xxx.LNT :库类型的列表,包括标准C/C++库,MFC库,OWL库等等。

    AU-xxx.LNT :C++编程提出过重要建议的作者,选择某作者后,他提出的编程建议方面的选项将被打开。

    OPTIONS.LNT :反映全局编译信息显示情况的选项文件。

    上面是从网上搜索整理的,下面再个扫描VC工程的例子

    0_12942812829F89.gif

    如果要扫面单个文件则在pc-lint菜单下再新建一个菜单pc-lint-single,其它设置同上,只需把Arguments那一行的设置改为

    +v +ffn -I"c:/lint" std.lnt co-msc60.lnt env-vc6.lnt --u$(WkspName).lnt $(FilePath)

    要扫面工程,则进入VC工程的目录,假设是d:/test/projectname.dsp, 进入d:/test后

    运行c:/lin/lint-nt projectname.dsp > projectname.lnt

    则会生成projectname.lnt文件, 用ultraedit打开projectname.lnt文件,把里面不是源代码或头文件的文本行删除。比如下面这几段:

    #ADD xxxxxx

    xxxxx

    use (+linebuffer)

    /I xxxxx

    xxxxx

    use (+linebuffer)

    之后打开VC工程运行VC的总菜单tools-->pc-lint或tools-->pc-lint-single就可以扫面工程或单个文件

    展开全文
  • PC Lint 9 PC Lint 9

    热门讨论 2010-07-15 23:55:40
    PC Lint 9,优秀的静态代码检查工具,做C/C++开发的好帮手 PC Lint 9,优秀的静态代码检查工具,做C/C++开发的好帮手
  • 详细的介绍和如何将PClint的安装结合自己的大型工程,节省开发的成本和提高码代码的工作效率
  • PClint检测报告

    2011-11-18 14:56:06
    静态代码检测工具---PC-lint PC-LINT中的各种错误信息都有一个相关的错误号,以及修改的参考。
  • PClint错误码大全.doc

    2016-12-17 09:28:44
    PClint错误码大全,这个是全的。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,160
精华内容 2,864
关键字:

pclint

友情链接: ex-06.zip