pc-lint如何不检查头文件

a6567109 2011-09-19 12:05:34
求助pc-lint高手,我现在在vs中集成了pc-lint,使用单文件检查的时候,工具会自动的检查所有包含的头文件。产生很多无用的信息,请问怎样能不检查头文件(不是屏蔽错误信息,屏蔽的话还是会检查,浪费很多时间)。
非常感谢~~
...全文
1195 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangdongqian 2011-09-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 a6567109 的回复:]
正确的使用方法就是检查相关的头文件么?
是不是我所检查的头文件有错误才会报错?
但是如果每次检查单个文件都要lint所有头文件,所带来的时间开销就不可忽略了,
请教一下。。。谢谢~~~~

引用 5 楼 yangdongqian 的回复:

"产生很多无用的信息"说明pclint相关的设置有问题,你“不检查头文件”的想法是不合适的,其不是pclint的正确使用方法。
[/Quote]
1、如前面几位所说头文件是必须检查的。
2、你的头文件和源文件中使用的接口是一致的lint是不会报错的
3、lint时只会检查C文件相关的头文件,不会(也不用)检查所有头文件,现在的PC你是不用考虑时间开销的。
说明:头文件不用指定去lint,源码中有包含,在使用工具是指定头文件的存放路径就可以了。请仔细看相关的帮助文档(lint程序路径下有)。
lew0002 2011-09-22
  • 打赏
  • 举报
回复
呵呵,pclint不是“自动检查”所有包含的头文件,是必须检查。
你的代码和它所包含的头文件是一个整体
编译器如果找不到你包含的头文件,肯定会产生一个错误,因为它没有得到代码的全部信息
所以除非pclint像编译器一样支持预编译头文件一样的概念,你是没有办法节省时间的
赵4老师 2011-09-22
  • 打赏
  • 举报
回复
听说pclint的配置文件是纯文本的,如果有例外文件列表功能,把某个目录下所有文件都添加进例外列表应该不难吧。
比如在cmd窗口里面输入以下命令
dir /b /a-d /s c:\mydir\include\*.h* >allh.txt
allh.txt文件中即每行一个的c:\mydir\include目录下的所有头文件的文件名。
赵4老师 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 a6567109 的回复:]
但是我的工程头文件那么多,要是意义添加进去会很耗时,是不是还有更好地办法。。。求教

引用 4 楼 zhao4zhong1 的回复:

没具体用过pclint。
瞎猜一下,可能可以在某个地方设置例外文件列表吧。
[/Quote]
或者可以添加例外目录?
a6567109 2011-09-22
  • 打赏
  • 举报
回复
但是我的工程头文件那么多,要是意义添加进去会很耗时,是不是还有更好地办法。。。求教
[Quote=引用 4 楼 zhao4zhong1 的回复:]

没具体用过pclint。
瞎猜一下,可能可以在某个地方设置例外文件列表吧。
[/Quote]
a6567109 2011-09-22
  • 打赏
  • 举报
回复
正确的使用方法就是检查相关的头文件么?
是不是我所检查的头文件有错误才会报错?
但是如果每次检查单个文件都要lint所有头文件,所带来的时间开销就不可忽略了,
请教一下。。。谢谢~~~~
[Quote=引用 5 楼 yangdongqian 的回复:]

"产生很多无用的信息"说明pclint相关的设置有问题,你“不检查头文件”的想法是不合适的,其不是pclint的正确使用方法。
[/Quote]
yangdongqian 2011-09-20
  • 打赏
  • 举报
回复
"产生很多无用的信息"说明pclint相关的设置有问题,你“不检查头文件”的想法是不合适的,其不是pclint的正确使用方法。
赵4老师 2011-09-19
  • 打赏
  • 举报
回复
没具体用过pclint。
瞎猜一下,可能可以在某个地方设置例外文件列表吧。
a6567109 2011-09-19
  • 打赏
  • 举报
回复
这个道理我也是明白的。
在这里请教各位达人,能否提供一个可行的办法解决我的问题。
[Quote=引用 2 楼 zhao4zhong1 的回复:]

规矩是人定的,人不能被规矩限制死。
比如规定不许随地大小便,难道没有厕所的地方人会被大小便憋死吗?
[/Quote]
赵4老师 2011-09-19
  • 打赏
  • 举报
回复
规矩是人定的,人不能被规矩限制死。
比如规定不许随地大小便,难道没有厕所的地方人会被大小便憋死吗?
chenbiquan 2011-09-19
  • 打赏
  • 举报
回复
关注问题……我也有同样的困惑……
PC-Lint是一个历史悠久、功能强大的C/C++静态代码检测工具,其使用历史可以追溯到计算机编程的远古时代(30多年前)。经过多年的发展,它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误,还能够有效地帮助开发人员提出许多程序在空间利用、运行效率上的改进点,从而提高软件的质量。 PC-Lint是GIMPEL SOFTWARE公司的产品,许多国外的大型专业软件公司,如微软公司,都把它作为程序检查工具,在程序合入正试版本或交付测试之前一定要保证通过了LINT检查。要求软件工程师在使用LINT时要打开所有的编译开关,如果一定要关闭某些开关,那么要给出关闭这些开关的正当理由。 PC-Lint能够将C/C++程序中的遁词、特性、问题和缺陷等找出来。这种分析的目的是为了在程序整合或移植前确定程序中潜在的问题,找出可能是敏感源未被发现的错误的特殊结构。PC-Lint能够在多个模块中查找,因此比编译器更能发现问题。 可以把PC-Lint看作是一种更加严格的编译器。但它仅使用程序源代码和头文件工作,不需要编译器的参与。本质上PC-Lint是进行严格的词法语法和语义分析工作。能否通过PC-Lint的检测将成为程序开发人员的严峻挑战。当然,有些没有通过PC-Lint的程序照样能够运行,通过了也不能保证没有问题,但是PC-Lint代表了一致性和可移植性以及良好的风格是无可厚非的。 可想而知,如果从编码后第一次编译程序时就使用LINT检查程序,并且保证消除所有的LINT告警,那么软件编码结束后整个工程再编译时就不会遇到很多的告警信息。即使整个工程在编译时,如果能抽出一定的精力来消除程序中的LINT告警,以后再维持这种无告警状态就很容易了。程序质量的提高也是不言而喻的。 PC-LINT的内容非常广泛,光是选项就有300多个,涉及到程序编译及语法使用中的方方面面。它的全称是PC-Lint/FlexeLint for C/C++。PC-Lint能够在Windows、MS-DOS和OS/2平台上使用,以二进制可执行文件的形式发布,而FlexeLint 运行于Linux/Unix平台,以源代码的形式发布。 PC-Lint包中包含3个可执行文件:一个Windows可执行文件(在Windows下运行的32位控制台程序)、一个DOS扩展的可执行文件(在MS-DOS下运行,利用80386 DOS扩展技术来访问所有可利用的扩展内存)和一个OS/2 32位的可执行文件(只在OS/2下运行)。 使用PC-Lint在代码走读和单元测试之前进行检查,可以提前发现程序隐藏错误,提高代码质量,节省测试时间,并提供编码规则检查,规范软件人员的编码行为。
代码静态分析工具PC-LINT安装配置 PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器。它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误。 C语言的灵活性带来了代码效率的提升,但相应带来了代码编写的随意性,另外C编译器不进行强制类型检查,也带来了代码编写的隐患。PCLint识别并报告C语言中的编程陷阱和格式缺陷的发生。它进行程序的全局分析,能识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针,冗余的代码,等等。软件除错是软件项目开发成本和延误的主要因素。PClint能够帮你在程序动态测试之前发现编码错误。这样消除错误的成本更低。 使用PC-Lint在代码走读和单元测试之前进行检查,可以提前发现程序隐藏错误,提高代码质量,节省测试时间。并提供编码规则检查,规范软件人员的编码行为。 由于PC-LINT对于一般程序员来说可能比较陌生,有好多人安装了也不知道怎样配置和使用。 下面我就根据自己的安装和配置心得对PC-Lint的安装、配置及使用进行下详细说明.本人主要介绍了将PC-Lint集成到VC++6.0和SourceInsight的方法和步骤。 (一)Windows下C/C++开发工具中,VC6使用较为普遍,因此这里先讲下VC6.0环境中集成pclint的步骤. 首先, 当然要下载软件,正版软件要200多$呢,买不起!所以只好网上找免费的拉。从http://www.61ic.com/down/othe/pclint.rar处可以下载到一个8.0版本的pclint. 1.将pclint.rar解压至c:\, 这样lint文件就位与c:\pclint(安装目录)下了。 2.将c:\pclint\lnt 下的3个文件lib-w32.lnt,env-vc6.lnt,co-msc60.lnt拷贝至c:\pclint下, 再在安装目录下创建std.lnt和options.lnt两个文件,其中std.lnt的内容如下 // contents of std.lnt c:\pclint\co-msc60.lnt c:\pclint\lib-w32.lnt c:\pclint\options.lnt -si4 -sp4 -i"D:\Program Files;D:\Program Files\Microsoft Visual Studio\VC98\Include" //end 其中-i后面的路径名为VC的安装路径和VC Include 文件路径,根据自己的修改便可。 options.lnt 内容可为空,为定制内容,以后需要时再添加。 准备工作做完了,下一步就是要将pclint集成到VC6中去,先配置lint使之能对单个C或C++文件进行检查。 1.打开VC6,tools--->customize-->tools 新建一个名为pclint的项,在下面填入 command: C:\pclint\lint-nt.exe arguments: -u c:\pclint\std.lnt c:\pclint\env-vc6.lnt "$(FilePath)" Use Output Window 打上勾 close 完成。 这个在你VC窗口tools菜单下应该多了一个pclint选项,可以用它来运行lint程序,对你的c/c++代码进行静态检查了。 现在就可以用个小程序测试一下pclint了 //test1.cpp #include class X { int *p; public: X() { p = new int[20]; } void init() { memset( p, 20, 'a' ); } ~X() { delete p; } }; 编译这个文件,看下你的编译器给你多少警告,再运行下lint, 可以自己对比一下。 我的机器上,VC产生0 errors 0 warnings, 而lint程序产生了如下8条警告信息,有些还是很有用处的提示,这里就不一一分析了. test.cpp(12): error 783: (Info -- Line does not end with new-line) test.cpp(7): error 1732: (Info -- new in constructor for class 'X' which has no assignment operator) test.cpp(7): error 1733: (Info -- new in constructor for class 'X' which has no copy constru
1. C 语言中的指针和内存泄漏 5 2. C语言难点分析整理 10 3. C语言难点 18 4. C/C++实现冒泡排序算法 32 5. C++中指针和引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38 8. C程序内存中组成部分 41 9. C编程拾粹 42 10. C语言中实现数组的动态增长 44 11. C语言中的位运算 46 12. 浮点数的存储格式: 50 13. 位域 58 14. C语言函数二维数组传递方法 64 15. C语言复杂表达式的执行步骤 66 16. C语言字符串函数大全 68 17. C语言宏定义技巧 89 18. C语言实现动态数组 100 19. C语言笔试-运算符和表达式 104 20. C语言编程准则之稳定篇 107 21. C语言编程常见问题分析 108 22. C语言编程易犯毛病集合 112 23. C语言缺陷与陷阱(笔记) 119 24. C语言防止缓冲区溢出方法 126 25. C语言高效编程秘籍 128 26. C运算符优先级口诀 133 27. do/while(0)的妙用 134 28. exit()和return()的区别 140 29. exit子程序终止函数与return的差别 141 30. extern与static存储空间矛盾 145 31. PC-Lint与C\C++代码质量 147 32. spirntf函数使用大全 158 33. 二叉树的数据结构 167 34. 位运算应用口诀和实例 170 35. 内存对齐与ANSI C中struct内存布局 173 36. 冒泡和选择排序实现 180 37. 函数指针数组与返回数组指针的函数 186 38. 右左法则- 复杂指针解析 189 39. 回车和换行的区别 192 40. 堆和堆栈的区别 194 41. 堆和堆栈的区别 198 42. 如何写出专业的C头文件 202 43. 打造最快的Hash表 207 44. 指针与数组学习笔记 222 45. 数组不是指针 224 46. 标准C中字符串分割的方法 228 47. 汉诺塔源码 231 48. 洗牌算法 234 49. 深入理解C语言指针的奥秘 236 50. 游戏外挂的编写原理 254 51. 程序实例分析-为什么会陷入死循环 258 52. 空指针究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. 连连看AI算法 274 56. 连连看寻路算法的思路 283 57. 重新认识:指向函数的指针 288 58. 链表的源码 291 59. 高质量的子程序 295 60. 高级C语言程序员测试必过的十六道最佳题目+答案详解 297 61. C语言常见错误 320 62. 超强的指针学习笔记 325 63. 程序员之路──关于代码风格 343 64. 指针、结构体、联合体的安全规范 346 65. C指针讲解 352 66. 关于指向指针的指针 368 67. C/C++ 误区一:void main() 373 68. C/C++ 误区二:fflush(stdin) 376 69. C/C++ 误区三:强制转换 malloc() 的返回值 380 70. C/C++ 误区四:char c = getchar(); 381 71. C/C++ 误区五:检查 new 的返回值 383 72. C 是 C++ 的子集吗? 384 73. C和C++的区别是什么? 387 74. 无条件循环 388 75. 产生随机数的方法 389 76. 顺序表及其操作 390 77. 单链表的实现及其操作 391 78. 双向链表 395 79. 程序员数据结构笔记 399 80. Hashtable和HashMap的区别 408 81. hash 表学习笔记 410 82. C程序设计常用算法源代码 412 83. C语言有头结点链表的经典实现 419 84. C语言惠通面试题 428 85. C语言常用宏定义 450
不多说了 直接上目录: 1. C 语言中的指针和内存泄漏 5 2. C语言难点分析整理 10 3. C语言难点 18 4. C/C++实现冒泡排序算法 32 5. C++中指针和引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38 8. C程序内存中组成部分 41 9. C编程拾粹 42 10. C语言中实现数组的动态增长 44 11. C语言中的位运算 46 12. 浮点数的存储格式: 50 13. 位域 58 14. C语言函数二维数组传递方法 64 15. C语言复杂表达式的执行步骤 66 16. C语言字符串函数大全 68 17. C语言宏定义技巧 89 18. C语言实现动态数组 100 19. C语言笔试-运算符和表达式 104 20. C语言编程准则之稳定篇 107 21. C语言编程常见问题分析 108 22. C语言编程易犯毛病集合 112 23. C语言缺陷与陷阱(笔记) 119 24. C语言防止缓冲区溢出方法 126 25. C语言高效编程秘籍 128 26. C运算符优先级口诀 133 27. do/while(0)的妙用 134 28. exit()和return()的区别 140 29. exit子程序终止函数与return的差别 141 30. extern与static存储空间矛盾 145 31. PC-Lint与C\C++代码质量 147 32. spirntf函数使用大全 158 33. 二叉树的数据结构 167 34. 位运算应用口诀和实例 170 35. 内存对齐与ANSI C中struct内存布局 173 36. 冒泡和选择排序实现 180 37. 函数指针数组与返回数组指针的函数 186 38. 右左法则- 复杂指针解析 189 39. 回车和换行的区别 192 40. 堆和堆栈的区别 194 41. 堆和堆栈的区别 198 42. 如何写出专业的C头文件 202 43. 打造最快的Hash表 207 44. 指针与数组学习笔记 222 45. 数组不是指针 224 46. 标准C中字符串分割的方法 228 47. 汉诺塔源码 231 48. 洗牌算法 234 49. 深入理解C语言指针的奥秘 236 50. 游戏外挂的编写原理 254 51. 程序实例分析-为什么会陷入死循环 258 52. 空指针究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. 连连看AI算法 274 56. 连连看寻路算法的思路 283 57. 重新认识:指向函数的指针 288 58. 链表的源码 291 59. 高质量的子程序 295 60. 高级C语言程序员测试必过的十六道最佳题目+答案详解 297 61. C语言常见错误 320 62. 超强的指针学习笔记 325 63. 程序员之路──关于代码风格 343 64. 指针、结构体、联合体的安全规范 346 65. C指针讲解 352 66. 关于指向指针的指针 368 67. C/C++ 误区一:void main() 373 68. C/C++ 误区二:fflush(stdin) 376 69. C/C++ 误区三:强制转换 malloc() 的返回值 380 70. C/C++ 误区四:char c = getchar(); 381 71. C/C++ 误区五:检查 new 的返回值 383 72. C 是 C++ 的子集吗? 384 73. C和C++的区别是什么? 387 74. 无条件循环 388 75. 产生随机数的方法 389 76. 顺序表及其操作 390 77. 单链表的实现及其操作 391 78. 双向链表 395 79. 程序员数据结构笔记 399 80. Hashtable和HashMap的区别 408 81. hash 表学习笔记 410 82. C程序设计常用算法源代码 412 83. C语言有头结点链表的经典实现 419 84. C语言惠通面试题 428 85. C语言常用宏定义 450 有需要的朋友可以根据需求下载,内容为WORD格式的,绝对清晰

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧