lint
ユーティリティは、指定された C のプログラムファイルを解析し、
バグの可能性がある部分、
移植性がないと考えられる部分、
あるいは無駄なコードと考えられる部分
の検出を試みます。
加えて、
lint
ユーティリティは、C コンパイラより厳密な型チェックを行います。
lint
は最初のフェーズでシンボル
"
lint"
を定義して C プリプロセッサを起動します。
これにより、ある疑わしいコード部分を
lint
に変更あるいはスキップさせることができます。
それゆえ、
lint
がチェックする全てのコードにおいては、シンボル
lint
は予約語とみなすべきです。
現在
lint
が指摘する問題点は以下のものです。
到達しない文、
先頭から入らないループ、
宣言したものの使用しない変数、
定数値となる論理式。
関数呼び出しに関しては以下のような矛盾点が指摘されます。
あるところでは値を返すが別の場所では値を返さない関数の呼び出し、
引数の個数が変化する関数の呼び出し、
関数側で想定していない型の引数を渡す関数呼び出し、
返値を使用しない関数呼び出し、
返値のない関数の存在しない返値を使用している関数呼び出し。
ファイル名引数のうち、末尾が
.c
で終わるものは C のソースファイルとみなされます。
ファイル名が
.ln
で終わるものは、以前
lint
を
-i,
-o
あるいは
-C
オプション付きで起動した際の結果を格納したファイルとみなされます。
.ln
ファイルは、
cc(1)
が
.c
から生成するオブジェクトファイル
.o
に相当します。
lint
ユーティリティはまた、
-l
オプションによって指定された特別なライブラリを受け付けます。
これは、ライブラリ関数と変数の定義を含むものです。
lint
ユーティリティは、全ての
.c, .ln
ファイルと
llib-llibrary .ln
(lint ライブラリ) ファイルを受け取り、
それらをコマンドラインで指定した順に処理します。
デフォルトでは、
lint
は標準 C lint ライブラリ
( llib-lc.ln)
をファイルリストの最後に付け加えます。
-i
オプションが指定されていれば、
.ln
ファイルは無視されます。
また、
-o
オプションあるいは
-i
オプションが指定されていれば、
llib-llibrary .ln
ファイルは無視されます。
-i
オプションが指定されて
いなければ、
lint
の 2番目の
パスでこのファイルリストが相互一貫性チェックに用いられます。
このとき、
もし問題箇所が与えられたソースファイルからではなく
インクルードファイルのひとつに端を発するものならば、
表示されるソースファイル名の後ろに疑問符が付けられます。
特別な入力ファイル名
" -"
は、
lint
に (ファイルの終端まで) 標準入力から入力を取らせ、これを
.c
ファイルとして処理させます。
-i
フラグが指定され
" -"
が入力ファイルの 1 個として指定された場合、出力ファイル名を指定するために
-o
フラグもまた指定される必要があります。
オプションは次の通りです:
-a
|
|
long
型以外の変数に対する
long
値の代入を報告します。
|
-aa
|
|
-a
に加え、
小さい型への暗黙の型変換を引き起こす
あらゆる
整数値代入を報告します。
|
-b
|
|
到達し得ない
break
文を報告します。
このオプションはデフォルトでは有効ではありません。
なぜなら、ほとんどの
lex(1)
および多くの
yacc(1)
出力はこのような break を数多く含むからです。
|
-c
|
|
移植性に問題のあるキャストについて報告します。
|
-e
|
|
enum
型に対する不正操作や
enum
型と
整数
型間の組み合わせについて報告します。
|
-g
|
|
gcc(1)
が C 言語に対して行っているいくつかの拡張機能についての警告を抑制します。
現在のところ、これに該当するのは以下のものです。
自動変数の集合型初期化式に現れる非定数式、
void 型へのポインタに対する算術操作、
enum
宣言の最後のコンマ、
C++ スタイルの
"//"
コメント、
サイズが 0 の構造体、
左辺値でない配列の添字付け、
旧形式の関数宣言を無効化するプロトタイプ宣言、
long long 整数型。
-g
オプションはまた、キーワード
asm
および
inline
を有効にします
(
asm
および
inline
の先頭にアンダスコアを付けたキーワードは
常に利用可能です)。
|
-h
|
|
いくつかの発見的テストを適用して
バグを発見し、スタイルを洗練し、無駄を省くことを試みます。
|
-i
|
|
コマンドラインの各
.c
ファイルに対して
.ln
ファイルを生成します。
これらの
.ln
ファイルは
lint
の最初のパスの結果に過ぎず、
関数間の一貫性チェックは行われません。
|
-n
|
|
標準ライブラリに対する一貫性チェックを行いません。
|
-p
|
|
他の C 方言への移植性に関するチェックを試みます。
|
-r
|
|
重複した宣言が見つかった場合、前回の宣言の位置を報告します。
|
-s
|
|
厳密な ANSI C モードでチェックします。
ANSI C で必要とされる警告およびエラーを出力します。
従来の C と ANSI C とで異なる振る舞いをする構造に対しての警告は行いません。
-s
オプション指定時は、
プリプロセッサマクロとして
__STRICT_ANSI__
が定義されます。
|
-t
|
|
従来の C モードでチェックします。
このモードでは
__STDC__
は定義されません。
従来の C で許可されない構造に対して警告が出力されます。
従来の C と ANSI C とで異なる振る舞いをする構造に対しての警告は抑制されます。
マシンタイプ (例:
sun3)
およびマシンアーキテクチャ (例:
m68k)
を記述したプリプロセッサマクロは、
先頭および末尾のアンダスコア無しで定義されます。
キーワード
const, volatile
および
signed
は従来の C モードでは利用できません (しかし、先頭にアンダスコアを
付したもう一方のキーワードは依然利用可能です)。
|
-u
|
|
使用されているが定義されていない、あるいは定義されているが使用されていない
関数および外部変数についての報告を行いません
(この機能は、大規模プログラムを構成する一部のファイルに対して
lint
を走らせる場合に向いています)。
|
-v
|
|
関数中の未使用引数に関する報告を抑制します。
|
-x
|
|
extern
宣言で参照されているが一度も使用されていない変数について報告します。
|
-z
|
|
定義されていない構造体に関する報告を抑制します
(例えば、中身を関知せずに構造体へのポインタを用いる場合など)。
|
-B path
|
|
バイナリ
lint1
と
lint2
を検索するために使用するパスです。
デフォルトは
/usr/libexec
です。
|
-C library
|
|
llib-llibrary .ln
という名前の
lint
ライブラリを作成します。
このライブラリは、全ての入力ファイル
.c
および
.ln
から作られます。
これらのファイルに含まれる全ての大域関数および大域変数の宣言が
新しく作られるライブラリに書き出された後、
lint
は
-l
オプションで指定されたライブラリを含めた全ての入力ファイルに対して
相互一貫性のチェックを行います。
|
-D name[=def]
|
|
cpp(1)
のために
#define
ディレクティブと同様にしてマクロ
name
を定義します。
右辺値が指定されない場合、マクロ
name
は 1 と定義されます。
|
-I directory
|
|
インクルードファイルを検索するディレクトリリストに
directory
を追加します。
|
-d directory
|
|
インクルードファイルを検索するデフォルトの場所を
/usr/include
の代りに
directory
にします。
|
-l library
|
|
lint ライブラリ
llib-llibrary .ln
をインクルードします。
|
-L directory
|
|
lint ライブラリを標準の場所から探す前に、
directory
および
directory /lint
の中を探します。
|
-F
|
|
ファイルのパス名全体を表示します。
lint
ユーティリティは通常、パスを除いたファイル名だけを表示します。
|
-H
|
|
もし問題箇所がインクルードファイルに端を発するものならば、
lint
はソースファイル名と それに続く疑問符に代えて
インクルードファイル名を表示します。
|
-o outputfile
|
|
出力ファイル名を
outputfile
とします。
出力ファイルは
lint
の2番目のパスの入力ファイルとなるものです。
-o
オプションは単に、このファイルを指定された名前でファイルに保存します。
同時に
-i
オプションも指定されていれば、これらのファイルは一貫性をチェックされません。
llib-llibrary .ln
ファイルを作成する際には、余分なメッセージを抑制するため、
-u
オプションの使用を推奨します。
lint ライブラリのソースファイルが単に外部インタフェースに過ぎない場合は、
-v
オプションを用いると便利です。
|
-U name
|
|
プリプロセッサが定義する全てのマクロ
name
を取り除きます。
|
-V
|
|
制御プログラムが C プリプロセッサおよび
lint
の第1 および第2 パスを実行する際のコマンドラインを表示します。
|
-w
|
|
警告をエラーとして扱います。
|
-X id[,id ...]
|
|
id で指定されるエラーメッセージを抑制します。
メッセージと id のリストは
lint(7)
を参照してください。
|