C ユーザーズガイド

lint が行う検査

lint 固有の診断は、矛盾した使い方、移植不能のコード、疑わしい言語構造の 3 つの広い条件カテゴリに対して表示されます。この節では、各カテゴリにおける lint の動作の例を示し、どのような対応が可能かを説明します。

整合性の検査

ファイル全域とファイル内部における変数、引数、関数の矛盾した使用を検査します。概して lint が古いスタイルの関数に対して検査していたのと同様に、プロトタイプの使用、宣言、引数を検査します。プログラムが関数プロトタイプを使用していない場合、lint は関数の呼び出しごとにコンパイラより厳しく引数の数と型を検査します。lint は、[fs]printf()[fs]scanf() の制御文字列の変換指示子と引数の不一致も識別します。次に例を示します。

移植性の検査

lint は、デフォルトでいくつかの移植不能コードを知らせます。lint-p または -Xc を指定して呼び出されると、さらに多くのケースが診断されます。-Xc により、lint は ANSI C 規格に一致しない言語構造を検査します。-p-Xc のもとで発行されるメッセージに関しては、lint ライブラリ」を参照してください。次に例を示します。

-p オプションで呼び出した lint は、普通の char が負の値を取る可能性があるような比較をすべて検査します。しかし上記の例では、csigned char で宣言しても、問題が除去されるのではなく診断が除去されるだけである点に注意してください。これは、getchar() が入力可能な文字と明確な EOF 値を返さなければならず、char がその値を格納することができないためです。これは、処理系ごとに定義される符号拡張から生ずる最も一般的な例です。これにより、lint の移植性オプションを注意深く使用すると移植性に関係しないバグを発見するのに役立つということがわかります。ここでは cint で宣言します。

診断は、-a オプションを指定して呼び出すことにより抑制することができます。どのオプションを指定して lint を呼び出しても、他の診断をも抑制する可能性があることに注意してください。2 つ以上の診断を抑制するオプションについては、lint ライブラリ」のリストを参照してください。

-h を指定して lint を実行することによってこの診断を抑制することができます。この場合もまた、他のメッセージを抑制する可能性があります。汎用ポインタ void * を使用すれば他の影響を回避することができます。

疑わしい言語構造

lint は、プログラマの意図には反するが、言語構造上は正しい箇所についても報告します。以下に例を示します。