Code::Blocks 使用技巧.3-CppCheck插件

是人就会犯错误,是程序员就经常有BUG。

如果是C++程序员,唉,BUG就更多了。

 

有些BUG是高层次的(譬如算法有误)……但也有些BUG,只不过是一时胡涂,或者忙中出错。

自从公司新来一位漂亮的女程序员(身材高挑,皮肤白皙),并且正好坐在我边上……我每100行代码的低级BUG量,急剧上升。

我决定用上Code::Blocks最近新带的插件工具:CppCheck。这是一款静态检查C++程序代码的工具。和C::B一样是一款开源的软件。

在SourceForge的主页是: sourceforge.net/apps/mediawiki/cppcheck/index.php

Cppcheck is an analysis tool for C/C++ code. Unlike C/C++ compilers and many other analysis tools, we don't detect syntax errors. Cppcheck only detects the types of bugs that the compilers normally fail to detect. The goal is no false positives.

CppCheck其实是一个独立的工具,完全脱离任何IDE可以运行,早先我就是独立使用它,但自打C::B把它给集成了,感觉使用起来更是方便了不少。

新版的插件菜单中,可以找到CppCheck插件

       新版的插件菜单中,可以找到CppCheck插件,不过事前你可能需要单独下载,安装好CppCheck。下载地址:

   sourceforge.net/projects/cppcheck/

 

      为了演示,直接上手。搞一些低级错误,让CppCheck检查一下:     

Code:
  1. #include <iostream>  
  2. #include <fstream>  
  3.   
  4. using namespace std;  
  5.   
  6. int main()  
  7. {  
  8.     #define MAX_INT_ITEM_COUNT 100  
  9.       
  10.     int* p = new int[MAX_INT_ITEM_COUNT]; //分配了内存  
  11.       
  12.     for (int i=0; i<MAX_INT_ITEM_COUNT; ++i)  
  13.     {  
  14.         p[i] = MAX_INT_ITEM_COUNT-i;  
  15.     }  
  16.           
  17.     return 0;    //没释放 p 就byebye了  
  18. }  

        运行插件,Code::Blocks 消息栏将显示检查结果:

CppCheck运行示例效果

   说的是: 在main.cpp 的第17行,存在“内存泄漏的可能,相关对象是:p。”

   呵呵,继续改一下代码:

Code:
  1. //... 前面代码略  
  2.     int* p = new int[MAX_INT_ITEM_COUNT]; //分配了内存  
  3.       
  4.     for (int i=0; i<MAX_INT_ITEM_COUNT; ++i)  
  5.     {  
  6.         p[i] = MAX_INT_ITEM_COUNT-i;  
  7.     }  
  8.           
  9.     delete p; //正确写法应是:delete[] p;  
  10.           
  11.     return 0;     
  12. //...  

不需编译,再从C::B菜单里运行一下CppCheck插件……这回是:

main.cpp|17|mismatchAllocDealloc : error : Mismatching allocation and deallocation: p|

意思是:在main.cpp文件里,第17行(上代码片段中的09行),有个“不匹配的内存分配与释放”的错误,对象仍然是:p。(new[] 出来的东西,要用delete[]释放,你非要说用delete也可以,那是因为你在用一个超级有问题的编译器....)

 

注意事项:

A) 显然,它不能检查一切。

B)但有意思的,它经常能查出你自己都想不到问题。(偶尔让你一身冷汗,连续120分钟不敢再边写代码边斜眼看边上的美女)

C)当然啦,有的它检查出来了,但倒也不一定就是天条,毕竟C++程序是自由的,C++程序员个个都会搞些暗爽的代码写法。

结合 Code::Blocks的一些问题

很大的工程,或者工程有超大的文件(往往是工具生成的那种),它检查起来是超慢的,这时C::B会先是死等,慢慢的,就会变成等死。

 

 想了解有哪些人在用c::b,请参看 :

http://student.csdn.net/space.php?uid=112600&do=thread&id=10087

 -------------------------------------------------------------------------------

 如果您想与我交流,请点击如下链接成为我的好友:
http://student.csdn.net/invite.php?u=112600&c=f635b3cf130f350c

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南郁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值