1. 程式人生 > >lint 程式碼審查工具

lint 程式碼審查工具

基本介紹 lint是最著名的C語言工具之一,是由貝爾實驗室SteveJohnson於1979在PCC(PortableC Compiler)基礎上開發的靜態程式碼分析,一般由UNIX系統提供。與大多數C語言編譯器相比,lint可以對程式進行更加廣泛的錯誤分析,是一種更加嚴密的編譯工具。最初,lint這個工具用來掃描C原始檔並對源程式中不可移植的程式碼提出警告。但是現在大多數lint實用程式已經變得更加嚴密,它不但可以檢查出可移植性問題,而且可以檢查出那些雖然可移植並且完全合乎語法但卻很可能是錯誤的特性。 隨著歷史的推移,Lint後來形成了一系列的工具,包括PC-Lint/FlexeLint(Gimpel),LintPlus(Cleanscape)以及Splint。

1基本功能編輯

lint檢查C程式中潛在的錯誤,包括(但不限於)可疑的型別組合、未使用的變數、不可達的程式碼以及不可移植的程式碼。lint會產生一系列程式設計師有必要從頭到尾仔細閱讀的診斷資訊。使用lint的好處是:1.它可以檢查出被
編譯器
漏掉的錯誤; 2.可以關聯很多檔案進行錯誤的檢查和程式碼分析,具有較強大靈活性.lint可以檢查的錯誤型別大體如下:
  • 可能的空指標
  • 在釋放記憶體後使用了指向該記憶體的指標
  • 賦值次序問題
  • 拼寫錯誤
  • 被0除
  • 失敗的case語句(遺漏了break語句)
  • 不可移植的程式碼(依賴了特定的機器實現)
  • 巨集引數沒有使用圓括號
  • 符號的丟失
  • 異常的表示式
  • 變數沒有初始化
  • 可疑的判斷語句(例如,if(x=0))
  • printf/scanf的格式檢查

2系統版本編輯

UNIX系統 在UNIX系統中,可自動獲得lint,它是一個標準的UNIX工具。 Linux系統 在Linux各種發行版中,使用lint的版本是GNU下的Splint(前身是LClint) Windows
 在Windows系統中,從第三方獲得的lint工具的名稱是PC lint以及Splint

3PC-lint編輯

PC-Lint簡介

PC-Lint是GIMPEL SOFTWARE公司開發的C/C++軟體程式碼靜態分析工具,是一個歷史悠久(30年之久)且功能異常強大的靜態程式碼檢測工具,它的全稱是PC-Lint/FlexeLint for C/C++。PC-Lint能夠在Windows、MS-DOSOS/2平臺上使用,以二進位制可執行檔案的形式釋出,而FlexeLint運行於其它平臺,以原始碼的形式釋出。PC-lint在全球擁有廣泛的客戶群,許多大型的軟體開發組織(比如Miscrosoft )都把PC-Lint檢查作為程式碼走查的第一道工序。對小公司和個人開發者而言,PC-Lint也非常的重要。小公司往往受到開發成本的考慮,不能對程式碼進行全面的測試。此時利用PC-Lint的強勁的功能可以很好的提高程式碼的質量。 C/
C++
語言的語法擁有其它語言所沒有的靈活性,這種靈活性帶來了程式碼效率的提升, 但相應也使得程式碼編寫具有很大的隨意性,另外C/C++編譯器不進行強制型別檢查,也不做任何邊界檢查,這就增加了程式碼中存在隱患的可能性。如果能夠在程式碼提交測試之前發現這些潛在的錯誤,就能夠極大地減輕測試人員的壓力,減少軟體專案的除錯成本,可是傳統的C/C++編譯器對此已經無能為力,這個任務只能由專用的程式碼檢查工具完成。而PL-lint就是這樣的程式碼檢查工具。PC-Lint不僅能夠對程式進行全域性分析,識別沒有被適當檢驗的陣列下標,報告未被初始化的變數,警告使用空指標以及冗餘的程式碼,還能夠有效地幫你提出許多程式在空間利用、執行效率上的改進點。在程式碼走讀和單元測試之前使用PC-Lint可以提前發現程式中的隱藏錯誤,提高程式碼質量,節省測試時間;並提供編碼規則檢查,規範軟體開發人員的編碼行為。

PC-lint作用

PC-Lint的作用廣泛,單單控制選項就300多個,涉及程式編譯及語法使用中大方方面面。具體如下
  1. PC-Lint是一種靜態程式碼檢測工具,是一種更加嚴格的編譯器,不僅可以檢查出一般的語法錯誤,還可以檢查出雖然完全符合要求,但是卻可能存在潛在的,不易發現的錯誤
  2. PC-lint不僅可以檢測單個檔案,也可以從整個專案的角度來檢測問題,因為C語言編譯器固有的單個編譯,這些問題在編譯器環境下很難被檢測,而PC-Lint在檢查當前檔案的同時還會檢查所有與之相關的檔案,可想而知,它會對我們有很大的幫助。
  3. PC-lint支援幾乎所有流行的編輯環境和編譯器,比如BorlandC++從1.x到5.x各個版本、Borland C++ Build、GCC、VC、watcom C/C++、Source insight、intel C/C++等等,也支援16/32/64的平臺環境。支援Scott Meyes的名著(Effective C++/More Effective C++)中說描述的各種提高效率和防止錯誤的方法。
更多關於PC-Lint的介紹參考可以參考[1]的詞條. PC Lint告警訊息分類
錯誤說明 C C++ 告警級別
1-199 1001-1199 1
語法錯誤 200-299 0
致命錯誤 300-399 0
告警 400-699 1400-1699 2
訊息 700-800 1700-1899 3
可選資訊 900-999 1900-1999 4
程式碼檢查告警級別 w0 不產生資訊(除了遇到致命的錯誤) w1 只生成錯誤資訊-- 沒有告警資訊和其它提示資訊 w2 只有錯誤和告警資訊 w3 生成錯誤、告警和其它提示資訊(這是預設設定) w4 生成所有資訊 函式庫標頭檔案的告警級別 wlib(0) 不生成任何庫資訊 wlib(1) 只生成錯誤資訊(當處理庫的原始碼時) wlib(2) 生成錯誤和告警資訊 wlib(3) 生成錯誤、告警和其它資訊(這是預設設定) wlib(4) 產生所有資訊 一般程式碼檢查功能 PC Lint能檢查出程式碼的語法錯誤和可能引起程式異常執行的邏輯告警。但它更側重於後者的檢查,因為這類問題更容易被人忽略(前者通過平臺編譯器去發現)。所以它的程式碼檢查功能通常表現在下面幾方面: 強型別檢查:強型別檢查選項“-strong”和它的輔助(補充)選項“-index”可以對typedef定義的資料型別進行強型別檢查,以保證只有相同型別之間的變數才能互相賦值 變數值跟蹤:包括對變數值初始化,變數值,函式內變數這些情況進行跟蹤,發現其中不符合語法規範的告警 賦值順序檢查:檢查當一個表示式的值依賴於賦值的順序時,是否會出問題 弱定義檢查:檢查當巨集定義、typedef名字、宣告、結構、聯合和列舉型別這些東西可能在模組中被過多定義且不被使用的情況。 格式檢查:檢查printf和scanf(及其家族)中的格式衝突告警 縮排檢查:檢查程式碼中的縮排問題是為避免出現程式碼結構不良或者大括號的遺漏等問題 const變數檢查 volatile變數檢查