C/C++ 靈活性帶來效率,也引入隨意性:編譯器不強制類型檢查、不檢測邏輯隱患。PC-lint 作為**更嚴格的編譯器**,能在編譯前發現:
new 無 delete)、重複釋放微軟等大廠將「PC-lint 零錯誤零警告」作為代碼入庫硬性門檻。
C:\pclintlnt 目錄下 lib-w32.lnt、env-vc6.lnt、co-msc60.lnt 到 C:\pclintstd.lnt:// std.lnt
C:\pclint\co-msc60.lnt
C:\pclint\lib-w32.lnt
C:\pclint\options.lnt -si4 -sp4
-i"D:\Program Files;D:\Program Files\Microsoft Visual Studio\VC98\Include"
options.lnt 供後續自定義規則VC6 Tools → Customize → Tools 新增:
C:\pclint\lint-nt.exe-u C:\pclint\std.lnt C:\pclint\env-vc6.lnt "$(FilePath)"生成 Tools → PC-lint 菜單,對當前文件檢查。
需 Unix 工具 find、xargs(下載 UnxUtils.zip 解壓至 C:\unix)。
新增 Tool:
C:\unix\usr\local\wbin\find.exe$(FileDir) -name *.c -o -name *.cpp | C:\unix\usr\local\wbin\xargs lint-nt -i"C:\unix\usr\local" -u C:\pclint\std.lnt C:\pclint\env-vc6.lnt生成 PC-lint Project,對整個目錄遞歸檢查。
PC-lintC:\pclint\lint-nt -u C:\pclint\std.lnt C:\pclint\env-vc6.lnt %f專案級同理,Command 用 find ... | xargs lint-nt ... %d(%d 為專案目錄)。
// test.cpp
#include
class X { int *p; public: X() { p = new int[20]; }
void init() { memset(p, 20, 'a'); } // 錯誤:參數順序反了
~X() { delete p; } // 錯誤:應用 delete[]
};
VC6 編譯:0 Error 0 Warning
PC-lint 報告 8 項警告:構造函數無拷貝/賦值、memset 參數錯誤導致越界、delete 非 delete[]、文件無換行符…
options.lnt 添加 -e{數字} 抑制特定誤報(如第三方庫頭文件)//lint -save -e{num} ... //lint -restore 區域抑制au-misra3.lntlint-nt 返回碼非零視為構建失敗PC-lint 是 C/C++ 團隊「左移質量」的利器。雖配置稍繁瑣,但一次投入、長期受益。建議:新專案從第一天接入,舊專案增量清理,配合 -w1(警告視為錯誤)構建零容忍質量文化。