Code::Blocks 提示.3-CppCheck外掛程式

來源:互聯網
上載者:User

是人就會犯錯誤,是程式員就經常有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檢查一下:     

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 訊息列將顯示檢查結果:

   說的是: 在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

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.