lint Command

用途

檢查 C 及 C++ 語言程式是否有潛在問題。

語法

lint [ -a ] [ -b ] [ -c ] [ -C ] [ -h ] [ -l索引鍵 ] [ -n ] [ -o檔案庫 ] [ -qDBCS ] [ -p ] [ -t ] [ -u ] [ -v ] [ -w 類別 [類別 ... ] ] [ -x ] [ -MA ] [ -Nd數字 ] [ -Nl數字 ] [ -Nn數字 ] [ -Nt數字 ] [ -我目錄 ] [ -D姓名 [=定義 ] ] [ -U姓名 ] 檔案 ...

說明

lint 指令會檢查 C 及 C++ 語言原始碼是否有編碼及語法錯誤,以及是否有低效率或不可攜的程式碼。 您可以使用此程式來執行下列動作:

  • 識別原始碼和程式庫不相容。
  • 比編譯器更嚴格地施行類型檢查規則。
  • 識別變數的潛在問題。
  • 識別函數的潛在問題。
  • 識別流程控制的問題。
  • 識別可能產生錯誤或無效的法律建構。
  • 識別未用的變數和函數宣告。
  • 識別可能不可攜的程式碼。

    附註: 使用 lint 指令檢查 C++ 語言檔案需要存在 C Set + + 編譯器套件。

會檢查函數的檔案間用法,以尋找在某些實例中傳回值但在其他實例中傳回值的函數、以不同數字或引數類型呼叫的函數,以及未使用其值或使用其值但未傳回其值的函數。

lint 指令會將副檔名解譯成如下:

  • .c 結尾的 檔案 名稱是 C 語言原始檔。
  • .C 結尾的 檔案 名稱是 C++ 語言原始檔。
  • . 在 結尾的 檔案 名稱是使用 -c -o 旗標時 lint 指令所產生的非 ASCII 檔案。

lint 指令會警告您含有其他字尾的檔案,並忽略它們。

lint 指令會取得所有 .c。C .ln 檔案及 -l 指定的程式庫會標示並依照它們在指令行上的出現順序來處理它們。 依預設,它會將標準 llib-lc.ln lint 程式庫新增至檔案清單結尾。 不過,當您選取 -p 旗標時, lint 指令會使用 llib-port.ln 可攜式程式庫。 依預設,第二次傳遞 lint 會檢查此檔案清單是否相互相容; 不過,如果您指定 -c 旗標, 會忽略 .ln llib-lx.ln 檔案。

-c-o 旗標容許在一組 C 及 C++ 語言原始檔上漸進式使用 lint 指令。 通常,針對具有 -c 旗標的每一個原始檔使用一次 lint 指令。 其中每一個執行都會產生對應於 .c 檔案的 .ln 檔案,並寫入所有關於該來源檔案的訊息。 在透過 lint 指令個別執行所有原始檔之後,請在沒有 -c 旗標的情況下再次執行它,並以所需的 -l 旗標列出所有 .ln 檔案。 這會寫入所有檔案間不一致。 此程序與 make 指令搭配運作良好,可讓它只在前次檢查原始檔集之後所修改的原始檔上執行 lint 指令。

lintLINT 前置處理器符號定義為容許針對 lint 指令變更或移除某些有問題的程式碼。 因此, lintLINT 符號應該視為計劃由 lint檢查的所有程式碼的保留字。

C 及 C++ 語言來源程式中的下列註解會變更 lint 指令在檢查來源程式時的運作方式:

項目 說明
/*NOTREACHED*/ 抑制關於無法呼叫到的程式碼的註解。
/*VARARGS號碼*/ 暫停檢查下列舊樣式函數宣告是否有不同數目的引數,但會檢查第一個 數字 引數的資料類型。 如果您沒有包含 Number的值, lint 指令不會檢查任何引數 (Number= 0)。 ANSI 函數原型應該使用省略符號來指出未指定的參數,而不是此註解機制。
/*ARGSUSEDED*/ 抑制關於函數定義內未使用的函數參數的警告。
/*LINTLIBRARY*/ 如果您將此註解放在檔案開頭,則 lint 指令不會識別檔案中未用的函數及函數參數。 在檔案庫上執行 lint 指令時使用。
/*NOTUSED*/ 暫停檔案中從出現點開始的未使用外部符號、函數及函數參數的相關警告。 這是 /*LINTLIBRARY*/ 註解指引的超集,但也適用於外部符號。 它有助於抑制關於未用函數原型及其他外部物件宣告的警告。
/*NOTDEFINED*/ 暫停檔案中已使用但未定義外部符號及函數的相關警告,從其出現點開始。
/*LINTSTDLIB*/ 允許透過使函數原型宣告顯示為函數定義,從標頭檔形成標準原型檢查程式庫。 此指引會隱含地啟動 /*NOTUSED*//*LINTLIBRARY*/ 註解指引,以減少警告雜訊層次。

lint 指令警告訊息會提供檔名及行號。 當每一個檔案通過第一次作業時,會報告每一個檔案及每一個行號的警告。

如果您未指定 -c 旗標,則 lint 指令會收集從所有輸入檔收集的資訊,並檢查其一致性。 此時,如果不清楚訊息是來自給定的原始檔還是來自其中一個併入檔,則 lint 指令會顯示原始檔名稱,後面接著問號。

包含許多標準標頭檔的 ANSI 程式可能想要設定 -wD 旗標,以減少未使用原型的警告數量,以及設定 -n 旗標以停用對 ANSI 標準程式庫的檢查。 對於非 ANSI 程式,建議指定 -wk 旗標,以減少關於缺少函數原型的警告數量。

旗標

項目 說明
-a 抑制將 long 值指派給非 long 變數的相關訊息。
-b 抑制關於無法呼叫到的岔斷陳述式的訊息。
-c 導致 lint 指令在指令行上為每個 .c 檔案產生 .ln 檔案。 這些 .ln 檔案只是 lint 指令第一次傳遞的產物,不會檢查功能間相容性。
-c 指定使用 C++ 程式庫 (在 /usr/lpp//xlC/lib 目錄中)。
-h 不嘗試偵測錯誤、不當樣式或減少浪費。
-l索引鍵 包括其他 llib-l索引鍵.ln lint 程式庫。 您可以在指令行上指定 -lm ,或在指令行上指定 -ldos 旗標,以併入 llib-lm.ln 數學程式庫的 lint 版本,或在指令行上指定 llib-ldos.ln 程式庫。 當檢查屬於具有大量檔案之專案的檔案時,請使用此旗標來併入本端 lint 程式庫。 此旗標不會阻止 lint 指令使用 llib-lc.ln 程式庫。 Lint 程式庫必須位於 /usr/ccs/lib 目錄中。
-n 暫停檢查與標準或可攜式 lint 程式庫的相容性。 這同時適用於 ANSI 和延伸模式檔案庫。
-o程式庫 導致 lint 指令建立 llib-lLibrary.ln lint 程式庫。 -c 旗標會將 -o 旗標的任何用法設為空值。 產生的 lint 檔案庫是提供給 lint 指令第二次傳遞的輸入。 -o 旗標只會將這個檔案儲存在指名的 lint 程式庫中。 若要產生不含額外訊息的 llib-lLibrary.ln ,請使用 -x 旗標。 如果 lint 程式庫的原始檔只是外部介面 (例如, llib-lc 檔案的寫入方式) ,則 -v 旗標很有用。 也可以透過使用 lint 指令註解行來使用這些旗標設定。
-P 檢查其他 C 語言用語的可攜性。
-T 從 32 位元移轉至 64 位元時檢查有問題的指派。 只會檢查下列情況:
  • 會標示所有移位/遮罩作業,因為在 32 位元中正常運作的部分作業可能會在 64 位元中造成問題。
  • 會針對下列類型的指派提供警告。
    int = long
    int = ptr
-u 抑制關於函數和外部變數的訊息,這些函數和外部變數已使用且未定義或已定義且未使用。 使用此旗標可對較大程式的檔案子集執行 lint 指令。
-v 暫停未使用的函數參數相關訊息。
-w 類別 [類別 ...] 控制警告類別的報告。 依預設,所有警告類別都在作用中,但可以個別取消啟動,方法是併入適當的選項作為 類別 引數的一部分。 個別選項列出如下:
A
非 ANSI 特性。
C
與不帶正負號值的比較。
D
宣告一致性。
h
啟發式抱怨。
k
用於 K + R 類型原始碼。
l
將長整數值指派給不是長整數的變數。
n
空值效應代碼。
o
評估順序不明。
p
各種可攜性問題。
r
傳回陳述式一致性。
儲存體容量檢查。
u
適當使用變數和函數。
A
取消啟動所有警告。
C
條件式中出現的常數。
D
永不使用外部宣告。
O
過時特性。
P
函數原型存在。
迴歸
偵測無法呼叫到的程式碼。
-x 抑制具有外部宣告但永不使用之變數的相關訊息。
-MA 施行 ANSI C 語言標準規則。 預設模式等於延伸 C 模式。 ANSI 模式會在標準 ANSI 程式庫函數原型之前附加,以取代預設延伸模式 C lint 程式庫。 ANSI 模式會施行更嚴格的檔案間物件參照,並提供定義鏈結檢查。
-Nd數字 將維度表格大小變更為 數字數字 的預設值為 2000。
-Nl數字 將類型節點數目變更為 數目數字 的預設值為 8000。
-Nn數字 將符號表的大小增加到 數字數字 的預設值是 1500。
-Nt數字 將樹狀結構節點數目變更為 數目數字 的預設值為 1000。

此外, lint 指令可辨識 cpp 指令 (巨集前置處理器) 的下列旗標:

項目 說明
-I名錄 目錄 新增至 lint 指令在其中搜尋 #include 檔案的目錄清單。
-D名稱[=Definition] 定義 名稱,如同 #define 檔案一樣。 定義 的預設值為 1。
-qDBCS 設定現行語言環境指定的多位元組模式。
-U名稱 移除 名稱的任何起始定義,其中 名稱 是特定前置處理器預先定義的保留符號。

結束狀態

這個指令會傳回下列結束值:

項目 說明
0 順利完成。
> 0 發生一個錯誤。

範例

  1. 若要檢查 C 程式是否有錯誤,請輸入:
    lint command.c
  2. 若要暫停部分訊息,請輸入:
    lint -v -x program.c
    此檢查program.c,但不會顯示關於未用函數參數 (-v) 或未用外部部 (-x) 的錯誤訊息。
  3. 若要對照其他 lint 程式庫來檢查程式,請輸入:
    lint -lsubs program.c
    此檢查program.c針對 /usr/ccs/lib/llib-lc.ln 標準 lint 程式庫及 /usr/lib/llib-lsubs.ln lint 程式庫。
  4. 若要檢查可攜式媒體庫及其他媒體庫,請輸入:
    lint -lsubs -p program.c
    此檢查program.c針對 /usr/ccs/lib/llib-port.ln 可攜式 lint 程式庫及 /usr/lib/llib-lsubs.ln lint 程式庫。
  5. 若要僅檢查非標準媒體庫,請輸入:
    lint -lsubs -n program.c
    此檢查program.c僅針對 /usr/lib/llib-lsubs.ln

檔案

項目 說明
/usr/lib/lint[12} 程式
/usr/ccs/lib/llib-lansi 標準 ANSI 函數 (來源) 的宣告
/usr/ccs/lib/llib-lansi.ln 標準 ANSI 函數的宣告 (二進位格式)
/usr/ccs/lib/llib-lc 標準函數 (來源) 的宣告
/usr/ccs/lib/llib-lc.ln 標準函數的宣告 (二進位格式)
/usr/ccs/lib/llib-lcrses Curses 函數 (來源) 的宣告
/usr/ccs/lib/llib-lcrses.ln Curses 函數的宣告 (二進位格式)
/usr/ccs/lib/llib-lm 標準數學函數 (來源) 的宣告
/usr/ccs/lib/llib-lm.ln 標準數學函數的宣告 (二進位格式)
/usr/ccs/lib/llib-port 可攜式函數 (來源) 的宣告
/usr/ccs/lib/llib-port.ln 可攜式函數的宣告 (二進位格式)
/usr/lpp//xlC/lib 包含 C++ 程式庫的目錄
/var/tmp/*lint* 暫存檔