スポンサーリンク

LINT(1) FreeBSD 一般コマンドマニュアル LINT(1)

名称

lint − C プログラムの検証を行う

書式

lint [−abceghprvwxzHFV] [−s | −t] [−i | −nu] [−D name[=def]] [−U name] [−I directory] [−d directory] [−L directory] [−l library] [−o outputfile] [−B directory] [−X id[,id ...]] file ...

lint [−abceghprvwzHFV] [−s | −t] −C library [−D name[=def]] [−U name] [−I directory] [−d directory] [−B directory] [−X id[,id ...]] file ...

解説

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
バイナリ lint1lint2 を検索するために使用するパスです。デフォ ルトは /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) を参照してください。

入力文法
lint
の第 1 パスは標準的な C ソースファイルを読み込みます。 lint ユーティ リティは以下のような C のコメントをコマンドとして認識します。

/* ARGSUSEDn */
最初の n 個の引数に対してのみ使用チェックを行います。 n を省略す ると 0 と解釈されます (このオプションは、次の関数に対して −v オプ ションと同様の働きをします)。

/* BITFIELDTYPE */
型が整数の場合、不正なビットフィールド型に関するエラーメッセージ を抑制します。また、可搬性の無いビットフィールド型の警告を抑制し ます。

/* CONSTCOND */ 又は /* CONSTANTCOND */ 又は /* CONSTANTCONDITION */
次の式に対する定数オペランドに関する報告を抑制します。

/* FALLTHRU */ 又は /* FALLTHROUGH */
case
あるいは default ラベルのついた文への fall through に関する 報告を抑制します。このディレクティブはそれらのラベルの直前に置く 必要があります。

/* LINTLIBRARY */
ファイル先頭で、このファイル中で定義される全ての関数および変数が 使用されているとマークします。また、未使用の関数引数に関する報告 も行いません。

/* LINTED [
comment
] */ 又は /* NOSTRICT [
comment
] */
未使用の変数あるいは関数に関するものを除き、ファイル内に閉じた問 題点に関する警告を抑制します。このディレクティブは、 lint 警告が 発生する場所の直前の行に置く必要があります。

/* LONGLONG */
long long 整数型の使用に関する報告を抑制します。

/* NOTREACHED */
しかるべき場所において、未到達コードに関する報告を抑制します (こ のコメントは通常、 exit(3) のような関数の呼び出しの直後に置きま す)。

/* PRINTFLIKEn */
lint
は最初の (n-1) 個の引数を普通にチェックします。 n 番目の引数 は printf(3) のフォーマット文字列と同様に解釈され、残りの引数を チェックするために用いられます。

/* PROTOLIBn */
もし n が 0 でなければ、 lint は関数宣言プロトタイプを関数宣言と して取り扱います。このディレクティブは /* LINTLIBRARY */ と共にの み用いることができます。 n が 0 の場合は、関数プロトタイプは通常 通り取り扱われます。

/* SCANFLIKEn */
lint
は最初の (n-1) 個の引数を普通にチェックします。 n 番目の引数 は scanf(3) のフォーマット文字列と同様に解釈され、残りの引数を チェックするために用いられます。

/* VARARGSn */
後続する関数宣言において、引数個数に関する通常のチェックを抑制し ます。最初の n 個の引数のデータ型がチェックされます。 n が指定さ れない場合は 0 と解釈されます。

−i オプションおよび −o オプションを用いると、ひと組の C ソースファイルに 対してインクリメンタルに lint を適用することが可能です。一般に、各ソース ファイルに対して −i オプション付きで lint を一度起動します。このとき、 .c に対応して .ln ファイルが作成され、それらのソースファイルに関する全ての メッセージが表示されます。全てのソースファイルに対して個別の lint 処理が 済んだ後、全ての .ln ファイルと必要な −l library オプションを付け、( −i オプション無しで) もう一度 lint を起動します。ここでファイル間の一貫性に 関する問題点が表示されます。この方式は make(1) を用いるとうまくいきます。 make(1) を用いると、前回ソースファイルの組が lint された後、修正のあった ファイルに対してのみ lint を起動することができます。

環境変数

       LIBDIR

−l library オプションで指定されたライブラリが存在するディレクト リ。この環境変数が定義されていない場合は、ライブラリ検索のために デフォルトパスとして /usr/libdata/lint が用いられます。

TMPDIR
一時ファイル用のパスは通常、この環境変数をセットすることで変更で きます。

CC
C コンパイラプログラムの場所。デフォルトは /usr/bin/cc です。

関連ファイル

       /usr/libexec/lint[12]

プログラム
/usr/libdata/lint/llib-l*.ln
前もって作成されている様々な lint ライブラ リ
/tmp/lint*
一時ファイル

関連項目

cc(1), cpp(1), make(1)

作者

Jochen Pohl

バグ

exit(3)longjmp(3) および戻って来ない他の関数は正しく理解されません。 これらは様々な不正診断の原因となります。

最初の extern 宣言の前でのみ用いられる static 関数は、未使用であると報告 されます。

−o オプションによって作られたライブラリは、のちの lint 実行で用いた場合、 ライブラリ作成時に報告されたある種のエラーが再度報告され、ライブラリ作成 時に用いたオリジナルのソースファイルの行番号およびファイル名がエラーメッ セージ中に表示されることがあります。そのため、lint ライブラリ作成には −C オプションを用いることを推奨します。

FreeBSD 10.0 May 24, 2001 FreeBSD 10.0

スポンサーリンク