pclint在VS2013中的使用

什么是pclint?


pclint是一个加强版C++编译器,是一种执行静态编译检查的工具,可以配合其它的C++编译器使用。

step 1. 安装,注意我的系统是64 windows + visual studio 2013。因此应该安装pclint 9i版本。

安装非常简单,安装完成后记得打补丁,参见附1.

step 2. 配置。

主要是建立几个*.lnt文件,即include.lnt, option.lnt, std.lnt。

  • 其中第一个用来指定你编译器中的主要头文件目录,我就是这个地方设置错了,导致后面系统编译总是提示Error 322: Unable to open include file ‘typeinfo’。
  • 第二个文件主要是指明你不希望哪些错误被显示出来,pclint对每一类错误都有一个编号,其中0-1000是分配给C语言的,大于1000是针对c++的。例如,如果不想看到714错误,就用-e714,否则用+e714。
  • 第三个主要指明编译器和操作系统的版本,也是系统自带config.exe文件做的工作。

Step 3. 使用-这个主要是配置一下visual studio的工具-外部工具,其实就是调用自定义的*.bat文件,利用lint-nt编译工具对当前文件/工程进行编译,注意输出内容指定到VS的输出框 。

例如,建立工程包含源文件如下,然后用外部工具编译:

int _tmain(int argc, _TCHAR* argv[])
{
	int i;
	int a[] = { 1, 2, 3 };
	int n = sizeof(a) / sizeof(int);
	for (i = 0; i <= n; i++)
		printf("a[%d]=%d\n", i, a[i]);

	return 0;
}

提示错误如下:

扫描二维码关注公众号,回复: 14688708 查看本文章

--- Module:   ConsoleApplication1.cpp (C++)

        printf("a[%d]=%d\n", i, a[i]);
ConsoleApplication1.cpp(13): error 661: (Warning -- Possible access of out-of-bounds pointer (1 beyond end of data) by operator '[' [Reference: file ConsoleApplication1.cpp: lines 11, 12, 13])
ConsoleApplication1.cpp(11): error 831: (Info -- Reference cited in prior message)
ConsoleApplication1.cpp(12): error 831: (Info -- Reference cited in prior message)

ConsoleApplication1.cpp(13): error 831: (Info -- Reference cited in prior message)

而用VS无法发现上述越界错误。

我在安装完成后,碰到的两个问题就是(1)提示typeinfo文件找不到;(2)提示

SDKDDKVer.h找不到。这两个问题在附2中都有提到,但是我的解决方法不一样,因为每个人的配置环境不一样。

参考:

(1) https://blog.csdn.net/finewind/article/details/43482797

(2)https://blog.csdn.net/xiake001/article/details/78272900

附录:我的include.lnt文件,需要说明的是我安装的是visual studio ultimate 2013版本,前面三个include大家可能基本一样,但是最后一个要自己查看一下SDKDDKVer.h文件在哪个目录下。

-iC:/lint  
-iC:/lint/lnt  
-i"C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/include"
-i"C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/atlmfc/include"
-i"C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/include"
-i"C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/include"

猜你喜欢

转载自blog.csdn.net/bennyfun79/article/details/80713746