五 總結
軟體除錯是軟體專案開發成本和延誤的主要因素,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與對應的編輯環境結合起來,xx是si表示是為Source Insight配置的檢查環境,xx是vc6則表示是為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)
留言列表