Code::Blocks 使用技巧.3-CppCheck插件
来源:互联网 发布:上海公交实时查询软件 编辑:程序博客网 时间:2024/05/22 05:16
是人就会犯错误,是程序员就经常有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。下载地址:
sourceforge.net/projects/cppcheck/
为了演示,直接上手。搞一些低级错误,让CppCheck检查一下:
- #include <iostream>
- #include <fstream>
- using namespace std;
- int main()
- {
- #define MAX_INT_ITEM_COUNT 100
- int* p = new int[MAX_INT_ITEM_COUNT]; //分配了内存
- for (int i=0; i<MAX_INT_ITEM_COUNT; ++i)
- {
- p[i] = MAX_INT_ITEM_COUNT-i;
- }
- return 0; //没释放 p 就byebye了
- }
运行插件,Code::Blocks 消息栏将显示检查结果:
说的是: 在main.cpp 的第17行,存在“内存泄漏的可能,相关对象是:p。”
呵呵,继续改一下代码:
- //... 前面代码略
- int* p = new int[MAX_INT_ITEM_COUNT]; //分配了内存
- for (int i=0; i<MAX_INT_ITEM_COUNT; ++i)
- {
- p[i] = MAX_INT_ITEM_COUNT-i;
- }
- delete p; //正确写法应是:delete[] p;
- return 0;
- //...
不需编译,再从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
- Code::Blocks 使用技巧.3-CppCheck插件
- Code::Blocks 使用技巧.2-缩写词
- 关于一些Code::Blocks的使用技巧
- 使用Code::Blocks编译NERvSDK的插件示例代码
- Code::Blocks 使用技巧.1-语法高亮
- Code::Blocks 使用技巧.4-编辑内容无级缩放
- Code::Blocks 使用技巧.6-让编译器多读几本书:)
- Code::Blocks 使用技巧.7-代码与流程图双向转换
- Code::Blocks 插件 AutoReadonly 发表
- 学习使用Code::blocks
- Code::Blocks使用释疑
- code blocks使用
- Code::Blocks使用释疑
- Code::Blocks 使用 SQLite3
- Code::Blocks 使用汇总
- Code::Blocks 的使用
- Code::Blocks程序调试技巧
- cppcheck使用
- Android图片查看器
- String.getBytes()和String(byte[] bytes, Charset charset)
- 毕业设计终于有眉目了
- 大学生活在于晨
- 关于属性传输中文的编码字符问题
- Code::Blocks 使用技巧.3-CppCheck插件
- 大家看了可能会有点启发!
- ....-_____________-
- 字符串和字符串函数复习
- 让Fedora查找最快的源 yum install yum-fastestmirror yum-presto
- 文件夹遍历递归与非递归算法(C#实现)
- 每天都要进步
- 以后多多关照
- 程序员考试学习笔记