visual lint 和 pc lint 使用实战

1) 弄清楚几件事

   正常下载的pclint基本上是8。00e版本,选项中没有2005的支持,

   从csdn上下载的和visual lint 的pc-lint 2005 是8.00x版本,支持2005。

 

(2)通过D:/Lint/lint-nt -v -i"D:/Lint" std.lnt

   来查看版本号。“-i"D:/Lint" std.lnt”可以不写。

(3)如何在vs2005中添加配置信息

PC-lint for C/C++是由Gimpel软件公司于1985年开发的代码静态分析工具,它能有效地发现程序语法错误、潜在的错误隐患、不合理的编程习惯等。

 

FlexeLint for C/C++是在PC_lint在windows平台获得成功后,同样由Gimpel公司开发的,以源代码形式发布的,在Unix/Linux平台上的静态代码分析工具。

 

本文主要介绍PC-lint的安装与配置,因此是在windows平台上进行讨论。

 

PC-lint支持几乎所有流行的编译器和IDE环境,可能因为其发展历史和面对专业程序员群体的原因,它是以命令行加配置文件的形式进行使用,所以其使用习惯跟现在常见的windows软件不同。

 

现以PC-lint与VS2005进行集成来说明:

 

将PC-lint释放到某一目录下,如:D:/Program Files/pclint.将新建一std.lnt文件在主目录中,并将添加上以下的内容

 

au-sm.lnt

co-msc80.lnt

lib-mfc.lnt

lib-stl.lnt

lib-w32.lnt

lib-wnt.lnt

lib-atl.lnt

options.lnt  -si4 -sp4

 

-i "C:/Program Files/Microsoft Visual Studio 8/VC/include"

-i "C:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/include"

-i "C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/include"

-i "C:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/include"

注意:-i后面为相应的vc头文件目录路径,而一系列xxx.lnt是语法配置规则,决定了按什么规则进行检查,以后可以根据需要进行增减. 写在配置文件中相应的的xxx.lnt从lnt子目录中,拷贝到主目录中

 

.(这一步很重要) 在vs2005中的工具->外部工具中,点击"添加",新建一个外部工具.标题可以任意,可取(pc_lint);命令为:D:/Program Files/pclint/LINT-NT.EXE;参数为:-i"D:/Program 

 

Files/pclint" std.lnt "$(ItemFileName)$(ItemExt)";初始目录为:$(ItemDir),并将下面的"使用输出窗口"勾选上. 接下来,就可以写一段程序,在工具菜单中选择pc_lint 来进行检查了.如果你

 

编写的程序有不符合定义的规范,则会在输出窗口中出现相关的信息.

 

   本人在使用时,发现一个需要大家关注的地方,-i"D:/Program Files/pclint" 最后面不要添加“/”, 否则会出错。

 

(4)visual lint 是在pc lint 基础上进行可视化的操作的。所以我们通过上面的方式,还是通过安装visual lint方式,其检测内容和结果是一致的,visual lint 更加直观一些!我们进行告警筛选的时候,都是在手动修改stl.lnt和option.lnt进行。这里有一个技巧,大家需要掌握,我们尽可能在option.lnt中添加目录变量,目录必须是绝对路径。比如-i"E:/GPTMap-2009/INCLUDE/m3d_view"。

(5)我们需要选择一些告警,而不是所有的告警。这里就需要搜集一些常见的告警,msg.txt中列出了所有的告警信息,便于我们查找和理解!

(6)这里还有一些信息,在其他的地方都可以找到,就不重复了!  

这里提供一些常用的告警,网友可以根据具体情况继续添加

+e506 //固定的Boolean char c=3; if(c<300){}

+e525 //缩排格式错误

+e527 //无法执行到的语句 if(a > B) return TRUE; else return FALSE;return FALSE;

+e529 //变量未引用 检查变量未引用的原因

+e530 //使用未初始化的变量

+e539 //缩排格式错误

+e545 //对数组变量使用& char arr[100], *p; p=&arr;

+e603 //指针未初始化 void print_str(const char *p); char *sz; print_str(sz);

+e605 //指针能力增强 void write_str(char *lpsz); write_str(string);

+e613 //可能使用了空指针

+e616 //switch语句中未使用break;

+e650 //比较数值时,常量的范围超过了变量范围 if( ch == 0xFF ) ...

+e713 //把有符号型数值赋给了无符号型 数值

+e715 //变量未引用

.......

 

你可能感兴趣的:(visual lint 和 pc lint 使用实战)