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 指令。
lint 及 LINT 前置處理器符號定義為容許針對 lint 指令變更或移除某些有問題的程式碼。 因此, lint 和 LINT 符號應該視為計劃由 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 位元時檢查有問題的指派。 只會檢查下列情況:
|
-u | 抑制關於函數和外部變數的訊息,這些函數和外部變數已使用且未定義或已定義且未使用。 使用此旗標可對較大程式的檔案子集執行 lint 指令。 |
-v | 暫停未使用的函數參數相關訊息。 |
-w 類別 [類別 ...] | 控制警告類別的報告。 依預設,所有警告類別都在作用中,但可以個別取消啟動,方法是併入適當的選項作為 類別 引數的一部分。 個別選項列出如下:
|
-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 | 發生一個錯誤。 |
範例
- 若要檢查 C 程式是否有錯誤,請輸入:
lint command.c
- 若要暫停部分訊息,請輸入:
此檢查program.c,但不會顯示關於未用函數參數 (-v) 或未用外部部 (-x) 的錯誤訊息。lint -v -x program.c
- 若要對照其他 lint 程式庫來檢查程式,請輸入:
此檢查program.c針對 /usr/ccs/lib/llib-lc.ln 標準 lint 程式庫及 /usr/lib/llib-lsubs.ln lint 程式庫。lint -lsubs program.c
- 若要檢查可攜式媒體庫及其他媒體庫,請輸入:
此檢查program.c針對 /usr/ccs/lib/llib-port.ln 可攜式 lint 程式庫及 /usr/lib/llib-lsubs.ln lint 程式庫。lint -lsubs -p program.c
- 若要僅檢查非標準媒體庫,請輸入:
此檢查program.c僅針對 /usr/lib/llib-lsubs.ln。lint -lsubs -n program.c
檔案
項目 | 說明 |
---|---|
/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* | 暫存檔 |