總結


    軟體除錯是軟體專案開發成本和延誤的主要因素,PC-lint能夠幫你在程式動態測試之前發現編碼錯誤,降低軟體消除錯誤的成本。使用PC-Lint在代 碼走讀和單元測試之前進行檢查,可以提前發現程式隱藏錯誤,提高程式碼品質,節省測試時間。另外,使用PC-lint的編碼規則檢查,可以有效地規範軟體人 員的編碼行為。如果能夠在軟體發展過程中有效地使用PC-lint程式碼檢查工具,將大大地提高程式碼品質,降低軟體成本。


參考文獻


[1] Gimpel Software. Reference Manual for PC-lint/FlexeLint. July,2001
[2] PC-Lint選項詳解


附錄一  PC-Lint 重要文件說明


  Msg.txt :解釋警告的內容。
  options.lnt :反映全局編譯資訊顯示情況的選項檔,通常需要添加自定選項以使程式碼檢查更為嚴格。
  env-xx.lnt :講述如何將PC-lint與對應的編輯環境結合起來,xxsi表示是為Source Insight配置的檢查環境,xxvc6則表示是為Visual C++ 6.0準備的檢查環境。
  co-xxx.lnt :選定的編譯器與庫選項。
  std.lnt :標準配置檔,包含記憶體模型等全局性東西。
  lib-xxx.lnt :庫類型的列表,包括標準C/C++庫,MFC庫,OWL庫等等。
  au-xxx.LNT C++編程提出過重要建議的作者,選擇某作者後,他提出的編程建議方面的選項將被打開。


附錄   錯誤資訊禁止選項說明


命令格式    說明              程式碼中的舉例
-e#               隱藏某類錯誤                                          /*lint -e725 */
-e(#)       隱藏下一運算式中的某類錯誤                /*lint –e(534) */
                                                                                          printf(“it’s all”);
!e#               隱藏本行中的錯誤                                /*lint !e534*/ printf(“it’s all”);
-esym(#, Symbol)  隱藏有關某符號的錯誤                /*lint –esym(534, printf)*/
                                                                                          printf(“it’s all”);
-elib(#)    隱藏頭檔中的某類錯誤                            /*lint –elib(129) */
                                                                                          #include “r01.h”
-efunc(#, <func>) 隱藏某個函數中的特定錯誤      /*lint –efunc(534, mchRelAll)*/
                                                                                        unsigned int mchRelAll(mchHoData
                                                                                       *pHoData)
                                                                                       {
                                                                                          printf(“it’s all”);
                                                                                        }


附錄   PC-Lint檢測中的常見錯誤


 


  


錯誤編碼  錯誤說明      舉例
40    變數未聲明 
506    固定的Boolean     char c=3;
            if(c<300){}
525    縮排格式錯誤 
527    無法執行到的語句    if(a > B)
            return TRUE;
            else
             return FALSE;
            return FALSE;
529    變數未引用      檢查變數未引用的原因
530    使用未初始化的變數 
534    忽略函數返回值 
539    縮排格式錯誤 
545    對陣列變數使用&     char arr[100], *p;
            p=&arr;
603    指標未初始化     void print_str(const char *p);
            …
            char *sz;
            print_str(sz);
605    指針能力增強     void write_str(char *lpsz);
            …
            write_str(“string”);
613    可能使用了空指針 
616    switch語句中未使用break; 
650    比較數值時,常量的範圍超過了 if( ch == 0xFF ) ...
    變數範圍 
713    把有符號型數值賦給了無符號型
    數值 
715    變數未引用 
725    Indentation錯誤 
734    在賦值時發生變數越界   int a, b, c;
            …
            c=a*b;
737    無符號型變/常量和有變數型
    /常量存在於同一個運算式中。  
744    switch語句中沒有default 
752    本地聲明的函數未被使用 
762    函數重複聲明 
774    Boolean運算式始終返回真/  char c;
            if(c < 300)


 

arrow
arrow
    全站熱搜

    立你斯 發表在 痞客邦 留言(0) 人氣()