マニュアルページ lint.1
名前
lint - C プログラムの検査
形式
lint [-#] [-###] [-a] [-b] [-Cfilename] [-c] [-dirout=dir]
[-err=warn] [-errchk=l] [-errfmt=f] [-errhdr=h]
[-erroff=t] [-errsecurity=v] [-errtags=a] [-errwarn=t]
[-F] [-fd] [-flagsrc=file] [-h] [-Idir] [-k] [-Ldir]
[-lx] [-m] [-m32|-m64] [-Ncheck=c] [-Nlevel=n] [-n]
[-ox] [-p] [-Rfile] [-s] [-u] [-V] [-v] [-Wfile]
[-Xarch=amd64] [-Xarch=v9] [-Xalias_level[=l]] [-XCC=a]
[-Xc99[=o]] [-Xexplicitpar=a] [-Xkeeptmp=a]
[-Xtemp=dir] [-Xtime=a] [-Xtransition=a]
[-Xustr={ascii_utf16_ushort|no}] [-x] [-y] files
機能説明
lint は、C プログラムファイルの機能で、バグ、移植性のない 部
分、無駄な部分などを検出します。
lint は、型の使用をコンパイラより厳密に検査します。lint は、
エ ラー メッセージや警告メッセージを出します。検出する項目に
は、次のものがあります。
o 到達できない文
o 先頭から入っていないループ
o 宣言されながら使用されない自動変数
o 値が一定している論理式
lint は、ある場所では値を返しある場所では値を返さない関 数、
引 数 の数や型が一定しない関数、引数の値が使用されていない関
数、値が使用されても何も返さない関数を検査します。
lint は 2 つのモードで動作します。基本モードは lint プログラ
ム のデフォルトです。拡張モードは基本 lintモードで行うすべて
の操作を含み、加えて詳細なプログラムコードの解析を行います。
拡張モードにおいては、次の解析を行います。
o ソースプログラムの構造とフロー解析
o 定数伝播と定数式の評価
o 制御フローとデータフロー解析
o データ型の使われ方の解析
以上により、拡張モードで lint は次の問題を検出できます。
o 使用されない #include 指令、変数、手続き
o メモリー解放後のメモリーの使われ方
o 参照されない代入文
o 初期化する前に参照される変数
o メモリーが割り当てられていない領域の解放
o 定数データセグメントに書き込みをするポインタ
o 違う値で再定義されるマクロ
o 制御が到達しないコード
o 使われ方が一致しない共用体内のメンバー型
o 実引数の暗黙的キャスト
拡張モードは -Nlevel または -Ncheck オプションにより有効にな
ります (次の機能説明を参照してください)。
名前が .c で終わっている引数は C のソースファイル、 .i で 終
わっている引数は前処理からの出力ファイル (コンパイラの -P オ
プションで作成されたもの) と見なします。
名前が .ln で終わっている引数は、 -C、 -c、 -o のいずれか の
オプションを使用して実行した lint の結果のファイルであると見
なします。 .ln ファイルは、 cc(1) に .c ファイルを指定して実
行 し た 結果作成される .o (オブジェクト) ファイルに似ていま
す。他の接尾辞が付いたファイルが渡されると、 lint は警告を出
し、そのファイルを処理しません。
拡張モードでは、lint は基本モードで作成される .ln ファイルよ
り 多 く の追加情報を格納する .ln ファイルを作成します。拡張
モードでは、lint は基本モードまたは拡張 lint モードの両方 で
作 成 さ れる .ln ファイルを読み、解釈できます。基本モードで
は、基本 lint モードで作成された .ln ファイルのみを読み、 解
釈できます。
lint は、( -lx によって指定されたもの) を接尾辞に持つすべ て
のファイルを受け付け、それらをコマンド行で指定された順序で処
理します。デフォルトでは、lint は標準の C lint ライ ブ ラ リ
(llib-lc.ln) をファイルの並びの最後に自動的に追加します。 -C
オプションまたは -c オプションが使用されると、 .ln ファイ ル
や llib-lx.ln ファイルは無視します。 -C オプションも -c オプ
ションも使用されない場合、lint の第 2 段階として、 .ln ファ
イルと llib-lx.ln ファイルの互換性を検査します。
lint には任意の数のオプションを任意の順で指定できます。そ の
中 には、ファイル名を示す引数を含むことができます。次の lint
オプションにより、いくつかのエラーメッセージまたは警 告 メッ
セージを抑止できます。
-# 起動される各構成要素を出力します (冗長モード)。
-### 起動される各構成要素を出力します。ただし、 -# オプ ショ
ンの場合とは異なり、実際には実行しません。
-a long 型でない変数に long 型の値が代入された場合の報告を
抑止します。
-b 到達できない break 文についての報告を抑止します。
-Cfilename
ファイル名 filename で指定された名前で .ln ファイルを作
成します。これらの .ln ファイルは、lint の第 1 段階でし
か作成されません。 filename には、絶対パス名を指定で き
ます。
-c は、コマンド行に指定された個々の .c ファイルに対して 1
つ の .ln を作成します。 .ln ファイルは、lint の第 1 段
階でしか作成されず、その時点で関数相互間の互換性は検 査
されません。
-dirout=dir
lint 出力ファイルが置かれるディレクトリ名を設定します。
このオプションは -c オプションに影響を及ぼします。
-err=warn
このオプションはマクロであり、 -errwarn=%all と同 じ で
す。
-errchk=l
値から渡される構造的な引数を検査します。長整数のサイ ズ
や ポ イ ンタが 64 ビットである環境への移植性を検査しま
す。
値は、-errchk=longptr64,structarg などのようにコンマ で
区切られたリストにすることが可能です。
デフォルトは -errchk=%none です。-errchk を指定すること
は、 -errchk=%all を指定することと同様です。
l は次のうち 1 つ以上を含む、コンマで区切られたチェック
のリストです。
[no%]locfmtchk
lint の最初のパスで print に似た書式の文字列 を
検 査します。二度目のパスでは -errchk=locfmtchk
を指定するかどうかに関係なく、必ず print に似た
書式の文字列の有無が確認されます。
[no%]parentheses
コードのメンテナンス性を向上させるために使用 し
ま す。-errchk=parentheses が警告を返す場合、括
弧を追加して、コード中の演算の優先順位を明確 に
することを検討してください。
[no%]signext
通常の ANSI/ISO C 値保持規則で、符号なし整数 型
の 表現で符号付き整数値の符号の拡張が許可される
場合に、エラーメッセージを生成します。このオ プ
ションは、 -errchk=longptr64 が同時に指定された
場合にのみエラーを生成します。
[no%]sizematch
大きな整数を小さな整数に割り当てるときに警告 し
ま す。これらの警告は、同じサイズでも符合が異な
る整数を割り当てるときにも発行されます (たと え
ば、unsigned int = signed int)。
[no%]structarg
値から渡される構造的な引数を検査し、仮引数型 が
不明である場合は報告します。
[no%]longptr64
長整数のサイズやポインタが 64 ビットであり、 普
通 の整数のサイズが 32 ビットである環境への移植
性を検査します。明示的なキャストが使用された 場
合 であっても、ポインタ式と長整数式の普通の整数
への代入を検査します。
%all errchk が行う検査をすべて実行します。
%none errchk が行う検査を何も実行しません。これ が デ
フォルトです。
-errfmt=f
lint の出力形式を指定します。f は次のいずれか 1 つに な
ります。 macro, simple, src または tab。
macro マクロを展開してソースコード、行番号、エラー の
起こった場所を表示します。
simple 行番号及びエラーの場所を括弧で囲み、1 行の単 純
な 診断メッセージとして表示します。 -s オプショ
ンと同じですが、エラー位置の情報を含ん で い ま
す。
src マクロを展開せず、ソースコード、行番号、エ ラー
の場所を表示します。
tab テーブル形式で表示します。
デフォルトは -errfmt = tab です。 -errfmt を指定する と
-errfmt = tab を指定した場合と同じになります。
2 つ以上のフォーマットが指定された場合は、最後に指定 さ
れたフォーマットが使用されます。lint は使用しない形式に
対して警告メッセージを出します。
-errhdr=h
-Ncheck と使用した場合、ヘッダーファイルに対してある 種
の メッセージを出すようにします。h は次のいずれかからな
るコンマで区切られる一覧になります。 dir, no%dir, %all,
%none, %user。
[no%]dir
ディレクトリ dir からインクルードされたヘッダー
ファイルの -Ncheck メッセージを報告します [しま
せん]。
%all 使用されるすべてのヘッダーファイルを検 査 し ま
す。
%none ヘッダーファイルを検査しません。これがデフォ ル
トです。
%user 使用されるすべてのユーザーヘッダーファイル、 つ
ま りコンパイラにより提供されるヘッダーファイル
を含む /usr/include およびそのサブディレク ト
リのヘッダーファイルを検査します。
デフォルトは -errhdr=%none です。 -errhdr を指定する と
-errhdr=%user を指定した場合と同じになります。
-erroff=t
lint エラーメッセージを抑止したり、有効にしたりします。
t はコンマで区切られる一覧で次のいずれかの組み合わせで
す。tag, no%tag, %all, %none。
[no%]tag
tag で指定されるメッセージを抑止します。
%all すべてのメッセージを抑止します。
%none すべてのメッセージを有効にします。これがデ フォ
ルトです。
デフォルトは -erroff=%none です。 -erroff を指定する と
-erroff=%all を指定した場合と同じになります。
-errsecurity=v
-errsecurity オプションを使用して、セキュリティーに問題
が な い かどうかコードを検査することができます。v は、
core、standard、extended、または %none のいずれかです。
-errsecurity の値が指定されなかった場合は、lint に よっ
て -errsecurity=%none に 設 定 されます。フラグなしで
-errsecurity が指定された場合は、 -errsecurity=standard
に設定されます。
core このレベルでは、たいていの場合で安全でないか、
あるいは検査することの難しいソースコードの構文
がないかを検査します。このレベルの検査には、以
下があります。
o printf() および scanf() 系の関数での変数書式
文字列の使用
o scanf() 関数における非結合文字列 (%s) 形式の
使用
o 安全な使用法のない関 数 の 使 用 : gets()、
cftime()、ascftime()、creat()
o O_CREAT と組み合わせた open() の不正使用
このレベルで警告が生成されるソースコードはバグ
と考えてください。問題のコードを変更することを
推奨します。どんな場合でも、単純明快でより安全
な別の方法があります。
standard このレベルの検査には、core レベルの検査に加 え
て、安全かもしれないが、より良い別の方法がある
構文の検査があります。新しく作成したコードの検
査には、このレベルを推奨します。このレベルで追
加される検査には、以下があります。
o strlcpy() 以外の文字列コピー関数の使用
o 脆弱な乱数関数の使用
o 安全でない関数を使った一時ファイルの生成
o fopen() を使ったファイルの作成
o シェルを呼び出す関数の使用
このレベルで警告を生成するソースコードは、新し
いコードまたは大幅に修正したコードに書き換えて
ください。ただし、従来のコードに含まれるこうし
た警告に対処することと、アプリケーションを不安
定にするリスクとのバランスを検討してください。
extended このレベルでは、core および standard レベル の
検査を含む完全な検査が行われます。また、状況に
よっては安全でない可能性がある構文について、多
数 の 警告が生成されます。このレベルの検査は、
コードを見直す際の一助になりますが、許容しうる
ソースコードが守る必要のある基準と考える必要は
ありません。このレベルで追加される検査には、以
下があります。
o ループ内での getc() または fgetc() の呼び 出
し
o パス名競合になりがちな関数の使用
o exec() 系の関数の使用
o stat() と他の関数との間の競合
このレベルで警告が生成されるコードを見直して、
安全上の潜在的な問題があるかどうかを判定するこ
とができます。
-errtags=a
各エラーメッセージに対してメッセージタグを表示します。a
は yes ま た は no のいずれかになります。デフォルトは
-errtags=no です。 -errtags を指定すると -errtags=yes
を指定した場合と同じになります。
あらゆる -errfmt オプションと共に動作します。
-errwarn=t
指定した警告メッセージが発行されると、 lint はエラー ス
テー タスを返して終了します。t はコンマで区切ったリスト
で、次の 1 つまたは複数から構成されます。
tag tag で指定したメッセージが警告メッセージとして
発行されると、 lint は致命的なエラーステータス
で終了します。tag が発行されない場合は影響しま
せん。
no%tag tag で指定したメッセージが警告メッセージとして
だ け 発行された場合に lint が致命的なエラース
テータスで終了しないようにします。tag が発行さ
れない場合は影響しません。このオプションを使用
すると、このオプションの tag または %all を 使
用して以前に指定したメッセージが警告メッセージ
として発行されても、 lint は致命的なエ ラー ス
テータスで終了しません。
%all どのような警告メッセージが発行されても、 lint
は 致 命的なエラーステータスで終了します。%all
のあとに no%tag を指定すると、特定の警 告 メッ
セージだけをこの動作から除外できます。
%none どのような警告メッセージが発行されても、 lint
が致命的なエラーステータスで終了することがない
ようにします。これはデフォルトです。
-F ファイルのパス名を出力します。通常、lint はファイル名だ
けを表示し、各ファイルのパスは表示しません。
-fd 旧式の関数定義と関数宣言について報告します。
-flagsrc=file
ファイル file に含まれるオプションと共に lint を実行 し
ます。file には 1 行に 1 つ複数のオプションが指定できま
す。
-h バグの発見、スタイルの改善、無駄な部分の削減を試みる 試
行錯誤のテストを適用しません。
-Idir
カレントディレクトリや標準の場所で検索する前に、イン ク
ルードファイルをディレクトリ dir で検索します。
-k /*LINTED [message]*/ 指令また は NOTE(LINTED(message))
注釈の動作を変更します。通常、lint はこの指令があると、
それ以降のコードについて警告メッセージを出力しませ ん。
一方、このオプションが指定されると、lint は該当する場所
で、コメントまたは注釈に指定されているメッセージを出 力
します。
-Ldir
標準の場所で検索する前に、lint ライブラリをディレクトリ
dir で検索します。
-lx lint ライブラリ llib-lx.ln を取り込みます。たとえば、コ
マ ン ド 行に -lm を挿入すれば、lint 版の数学ライブラリ
llib-lm.ln を取り込むことができます。この引数を使用して
も、llib-lc.ln のデフォルトの使用法が抑止されることはあ
りません。lint ライブラリは想定されるディレクトリに存在
し なければなりません。このオプションを使用するとローカ
ルの lint ライブラリを参照できるため、複数のファイル か
ら構成されるプロジェクトを開発しているときに便利です。
-m 静的に宣言すべき外部シンボルに関するメッセージを抑止 し
ます。
-m32|-m64
解析するプログラムのメモリーモデルを指定します。ま た、
選択されたメモリーモデル (32 ビット/64 ビット) に対応す
る lint ライブラリを検索します。
32 ビット C プログラムを検査する場合は -m32、64 ビッ ト
C プログラムを検査する場合は -m64 を使用してください。
64 ビットに対応していないすべて の Solaris プ ラッ ト
フォー ムおよび Linux プラットフォームでは、ILP 32 メモ
リーモデル (32 ビット int、long、ポインタデータ型) がデ
フォ ル ト です。64 ビットに対応している Linux プラット
フォームでは、LP64 メモリーモデル (64 ビット long、ポイ
ン タデータ型) がデフォルトです。 -m64 は、LP 64 モデル
に対応しているプラットフォームでのみ使用できます。
以前のコンパイラリリースでは、-Xarch フラグの選択により
暗 黙 でメモリーモデル ILP32 または LP64 が指示されまし
た。Sun Studio 12 のコンパイラからは、このことは当て は
まりません。ほとんどのプラットフォームでは、64 ビットプ
ログラムの lint 処理は、コマンド行に -m64 を追加する だ
けで十分です。
定義済みのマクロについての詳細は、lint オプションの一覧
のあとのセクションを参照してください。また、-Xarch も参
照してください。
-Ncheck=c
対応する宣言があるかどうかヘッダファイルを検査しま す。
マ クロも検査します。c はコンマで区切られた次のいずれか
からなる検査項目の一覧です。
macro ファイル間のマクロ定義に一貫性があるかどうか 検
査します。
extern ソース間および関連するヘッダーファイルにおけ る
宣 言(たとえば、file1.c および file1.h における
宣言)が 1 対 1 に対応しているかどうか検査 し ま
す。
ヘッダーファイルにふさわしくない宣言あるいは 不
足 し て いる extern 宣言がないかどうか確認しま
す。
%all Ncheck 検査のすべての項目を実行します。
%none Ncheck 検査のいずれの項目も実行しません。これが
デフォルトです。
no%macro は
Ncheck のマクロ検査を実行しません。
no%extern
Perform none of Ncheck の extern 検査を実行しま
せん。
コンマを使用 し て 値 を 結 合 し ま す。 た と え ば、
-Ncheck=extern,macro となります。
デフォルトは -Ncheck=%none です。 -Ncheck を指定する と
-Ncheck=%all を指定した場合と同じになります。
-Nlevel=n
問題報告に関する lint の拡張解析レベルを指定すること に
よっ て lint の拡張モードを有効にします。このオプション
で、検出エラーの量を制御できます。レベルが高いほど、 検
査 時間がなくなります。n は 1、2、3、4 のいずれかです。
デフォルトはありません。-Nlevel が省略された場合は、 基
本 lint 解析モードになります。引数なしで -Nlevel が指定
された場合、-Nlevel=4 に設定されます。
lint の基本および拡張解析モードについては、このマニュア
ルページの先頭部分、または C ユーザーズガイドを参照して
ください。
-Nlevel=1 1 つの手続きを解析します。プログラムの実行 パ
ス 上で起きる無条件エラーを報告します。大域データおよび
制御フロー解析を行いません。
-Nlevel=2 デフォルトです。大域データ、制御フローを含 む
プ ログラム全体を解析します。プログラムの実行パス上で起
きる無条件エラーを報告します。
-Nlevel=3 -Nlevel=2 で行われる解析に加えて、定数伝 播、
実 引数に定数が使用された場合のプログラム全体の解析を行
います。
この解析レベルで C プログラムの検証を行うと、前述のレベ
ルより 2 倍から 4 倍多く時間がかかります。lint は、プロ
グラム変数用に可能な値のセットを作成して、プログラム の
部 分的な解釈を仮定するので、時間が必要になります。これ
らの変数セットは、プログラムで使用できる定数オペラン ド
を 含む定数と条件文に基づいて作成されます。セットは、そ
の他のセットを作成するための基礎を形成します (定数伝 播
の形成)。解析結果として受け取ったセットは、次のアルゴリ
ズムに従って、誤りがないかどうかチェックされます。
オブジェクトのすべての可能な値の中に正しい値が存在す る
場 合は、その値が今後の伝播の基礎として使用されます。正
しい値が存在しない場合は、エラーと診断されます。
-Nlevel=4 -Nlevel=3 で行われる解析に加えて、プログラ ム
全 体 の 解析を行い、プログラム実行パス上で起こる条件エ
ラーを報告します。
このレベルでは、付加的な診断メッセージが出力されま す。
解析アルゴリズムは -Nlevel=3 での解析アルゴリズムとほぼ
同じですが、すべての無効な値に対してエラーメッセージ を
生 成する点が異なります。このレベルでの解析に必要な時間
は、最大2桁ほど増加する可能性があります (だいた い 20
倍 から 100 倍遅くなります)。この場合、解析に必要とされ
る時間は、再帰や条件文などによるプログラムの複雑さに 比
例 します。このため、100,000 行以上のプログラムでこのレ
ベルの解析行うのは困難です。
-n 標準の C lint ライブラリとの互換性を検査しません。
-ox llib-lx.ln という lint ライブラリを作成します。このライ
ブ ラ リは第 2 段階のパスで lint が使用するすべての .ln
ファイルをもとに作成されます。 -c オプションを使用す る
と、 -o オ プションはすべて無効になります。エラーメッ
セージが表示されないようにして llib-lx.ln を作成する た
めには、 -x オプションが使用できます。lint ライブラリの
ソースファイルが外部インタフェースだけで構成されてい る
場 合は、 -v オプションが便利です。作成した lint ライブ
ラリは lint が -lx オプションで起動された場合に使用でき
ます。
デフォルトでは lint の基本形式のライブラリを作成でき ま
す。lint の拡張モードを使用する場合は、作成されるライブ
ラリは拡張形式になり、拡張モードでのみ使用できます。
-p C の他の方言に移植できるかどうかの検査を試みます。よ り
厳密な検査を行うだけでなく、すべての非外部名を 8 文字に
します。また、すべての外部名を 6 文字にし、構成する文字
を大文字または小文字のいずれかに統一します。
-Rfile
cxref(1) で使用できるように .ln ファイルを file に出 力
し ます。拡張モードにいる場合には、このオプションは拡張
モードを無効にします。
-s 「警告:」または「エラー:」から始まる単純な診断情報を 生
成 し ます。デフォルトでは、lint は一部メッセージをバッ
ファリングして、複合出力を生成します。
-u 使用されながら定義されていない関数および外部変数に関 す
る メッセージと、定義されながら使用されていない関数およ
び外部変数に関するメッセージを抑止します (このオプ ショ
ン は、大型のプログラムを検査するとき、そのプログラムを
構成するファイルの一部に対して lint を実行する場合に 適
しています)。
-V 標準エラー出力に製品名とリリース番号書き込みます。
-v 関数内で使用されない引数に関するメッセージを抑 止 し ま
す。
-Wfile
cflow(1) で使用できるように a .ln ファイルを file に 出
力 します拡張モードにいる場合には、このオプションは拡張
モードを無効にします。
-Xalias_level[=l]
l が any, basic, weak, layout,strict, std, or strong の
一つである場合。詳細は、 C ユーザーズガイドを参照してく
ださい。 -Xalias_level を指定しない場合、デフォルトのフ
ラグは -Xalias_level=any になります。これは、型に基づい
た別名解析が行われないことを意味します。レベルを与え ず
に -Xalias_level を 指 定 し た 場 合、 デ フォルトは
-Xalias_level=layout になります。
コンパイラを実行したレベルほど厳密でない、明確なレベ ル
で lint を実行してください。コンパイルしたレベルより厳
密で、明確なレベルで lint を実行した場合、結果の解釈 は
困難です。
-Xarch=amd64
(Solaris オペレーティングシステム) 非推奨。使用しないで
ください。 -m32|-m64 を参照してください。
-Xarch=v9
(Solaris オペレーティングシステム) 非推奨。使用しないで
ください。 -m32|-m64 を参照してください。
-XCC=a
C++ 型のコメントを受け付けます。a は yes または no で
す。// は特別に、コメントの始まりを指定するのに使用され
ます。デフォルトは、 -XCC=no です。 -XCC は、 -XCC=yes
と同じ意味になります。
注:
-xc99=%none を使用する場合は、このオプションを使用し て
く ださい。 -xc99=%all (デフォルト) の下では、// によっ
て指定されたコメントを lint が受け入れます。
-Xc99=o
-Xc99 フラグは、C99 規格 (ISO/IEC 9899:1999, Program-
ming Language - C) から実装された機能に対するコンパイラ
の認識を制御します。
o には次のうちの一つを指定できます: all, none。
-Xc99=none を指定すると C99 機能 を 認 識 し ま せ ん。
-Xc99=all を指定するとサポートされた C99 機能を認識しま
す。引数なしで -Xc99 を指定すると、-Xc99=all と同 じ で
す。
注意事項:
コンパイラのサポートレベルは、C99 規格の機能をデフォ ル
トにしますが、Solaris(TM) 8 および 9 ソフトウェアにより
提供される /usr/include の標準ヘッダー は、 ま だ 1999
ISO/IEC C 規格に準拠していません。エラーメッセージが表
示された場合は、-Xc99=none を使用して、これらのヘッダー
の 1990 ISO/IEC C 規格の動作を取得してください。
-Xexplicitpar=a
(SPARC) lint に対して #pragma MP 指令を認識するように指
示 し ます。a は yes または no のいずれかになります。デ
フォルトは -Xexplicitpar=no で す。 -Xexplicitpar は
-Xexplicitpar=yes と同じ意味になります。
-Xkeeptmp=a
lint 実行時に使用した一時ファイルを自動的に削除するかわ
り に 保 存します。a は yesまたは no のいずれかになりま
す。デフォルト は -Xkeeptmp=no で す。 -Xkeeptmp は
-Xkeeptmp=yes と同じ意味になります。
-Xtemp=dir
一時ファイルのディレクトリを dir に設定します。このオプ
ショ ンを指定しない場合は、一時ファイルは /tmp に置かれ
ます。
-Xtime=a
各 lint パスに対して実行時間を表示します。a は yes また
は no のいずれかになります。デフォルトは -Xtime=no で
す。 -Xtime は -Xtime=yes と同じ意味になります。
-Xtransition=a
K&R C と Sun ANSI C の相違に対する警告メッセージを出 し
ます。a は yes または no のいずれかになります。デフォル
ト は -Xtransition=no で す。 -Xtransition は
-Xtransition=yes と同じ意味になります。
-Xustr={ascii_utf16_ushort|no}
このオプションを指定すると、形式 U"ASCII_string" の文字
列 リテラルを符号なし短整数の配列として認識できます。こ
のような文字列はまだ規格に含まれていないので、このオ プ
ションにより非標準 C の認識ができるようになります。
-Xustr=no を指定すると、U"ASCII_string" 文字列リテラ ル
を lint が認識しません。コマンド行のこのオプションの最
も右にあるインスタンスは以前のインスタンスをすべて上 書
きします。
デフォルトは -Xustr=no です。引数を指定しないで -Xustr
を 指定すると、コンパイラはそれを受け付けず、警告が発せ
られます。C または C++ 標準が構文の意味を定義する 場 合
は、デフォルトは変更できます。
同様に U"ASCII_string" 文字列リテラルを指定 し な い で
-Xustr=ascii_utf16_ushort を指定できます。これはエラー
にはなりません。
付加された文字列のコード例は、cc(1) のマニュアルペー ジ
の -xustr の説明を参照してください。
-x 外部宣言によって参照される変数をレポート、使用 し ま せ
ん。
-y lint の対象になっているファイルを /*LINTLIBRARY*/ 指 令
または NOTE(LINTLIBRARY) 注釈が使用された場合のように扱
います。通常、lint ライブラリを作成する場合は、 /*LINT-
LIBRARY*/ 指 令または NOTE(LINTLIBRARY) 注釈を使用しま
す。
lint は、 cc(1) コマンド行オプションの多くを認識します。その
中 には、 -A, -D, -E, -g, -H, -O, -P, -U, -Xa, -Xc, -Xs, -Xt
, 及び -Y が含まれますが、 -g と -O は無視します。上記以外の
オプションがあると警告を出し、そのオプションに対する処理を行
いません。定義済みマクロ lint により、特定の疑わしいコードを
変更したり削除したりできます。したがって、シンボル lint は、
lint によって検査する予定のすべてのコードのための予約語と 考
えてください。
lint はデフォルトで次の定義済みマクロを提供します ( -Xc モー
ドでは有効ではありません)。
#assert lint (on)
定義済みマクロは -Xc モードでは有効ではありません。
sun
lint
unix
sparc (SPARC のみ)
i386 (x86 のみ)
これらの定義済みマクロはすべてのモードで有効です。
__BUILTIN_VA_ARG_INCR
__SUNPRO_C=0x590
__SVR4(SPARC)
__SunOS(Solaris)
__SunOS_OSN.N(Solaris)
__amd64(x86、-m64使用時)
__gnu__linux(Linux)
__i386(x86)
__linux(Linux)
__linux__(Linux)
__sparc(SPARC)
__sparcv9(-m64使用時)
__sun(Solaris)
__unix
__`uname -s`_`uname -r`
__x86_64(x86)
linux(x86、linux)
C ソースに次のコメントがあると、lint: の動作が変更されます。
/*ARGSUSEDn*/
lint は先頭の n 個の引数だけについて、それらが使用
されているかどうかを検査します。 n を省略すると、0
と見なされます (この場合、この指令の後ろの関数に対
して -v オプションを指定した場合と同様の検査を行い
ます)。
/*CONSTCOND*/、/*CONSTANTCONDITION*/
条件式のオペランドとして定数が指定されている場合の
報告を抑止します。
/*EMPTY*/
if 文の結果として空文が実行されるときの報告を抑 止
します。この指令は、条件式とセミコロンの間に置いて
ください。この指令は、後ろに有効な else 文が続いて
い る 空の if 文をサポートするためのものです。else
文の結果の空文についてのメッセージも抑止します。
/*FALLTHRU*/、/*FALLTHROUGH*/
case ラベルまたは default ラベルの文に、直前のラベ
ルからそのまま制御が移った場合の報告を抑止します。
この指令は、ラベルの直前に置いてください。
/*LINTED [message]*/
使用されない変数または関数についての報告だけを有効
にし、特定のファイル内で行われるそれ以外の警告を抑
止します。この指令は、lint の警告が発生する場所 の
直 前 の行に置いてください。 -k オプションは、lint
がこの指令を扱う方法に対して警告を発しま す。 メッ
セー ジを抑止する代わりに、lint は、コメントに含ま
れる追加のメッセージを出力します。この指令は、 -s
オ プションとともに使用して、lint 後のフィルタ処理
を行うときに便利です。
/*LINTLIBRARY*/
-o が呼び出された場合、先頭の .c ファイルで宣言 さ
れ ている場合のみ、ライブラリの .ln ファイルへ書き
込みます。この指令は、使用されない関数やこのファイ
ル中の関数の引数の報告を抑止します。
/*NOTREACHED*/
到達不可能なコードに関する報告を停止します (通常、
こ のコメントは exit(2) のような関数の呼び出しの直
後に置きます)。
/*PRINTFLIKEn*/
このコメントがあると、lint は先頭の (n-1) 個の引数
を 通常どおり検査します。 nth 番目の引数は、printf
書式文字列として処理され、残りの引数の検査に使用さ
れます。
/*PROTOLIBn*/
n がゼロでないとき、関数宣言のプロトタイプを関数定
義として扱います。この指令は、/* LINTLIBRARY */ 指
令と組み合わせた場合にだけ使用できます。 n がゼ ロ
のとき、関数プロトタイプは通常どおりに扱われます。
/*SCANFLIKEn*/
lint は先頭の (n-1) 個の引数を通常どおりに検査しま
す。nth 番目の引数は、残りの引数を検査するときに使
用する scanf 書式文字列として処理します。
/*VARARGSn*/
この指令の後ろにある関数宣言では、引数の数が一定し
て い るかどうかの通常の検査を行いません。先頭の n
個の引数のデータ型を検査します。 n が指定されて い
な い場合は 0 と見なします。新しいコードまたは更新
されたコードでは、できるだけ定義の中で 省 略 記 号
(...) を使用してください。
lint に対する指令はファイル note.h をインクルードして、 ソー
スコードに対する注釈という形式で指定できます。たとえば次のよ
うになります。
#include <note.h>
NOTE(ARGSUSED(n))
NOTE(CONSTANTCONDITION)
NOTE(EMPTY)
NOTE(FALLTHROUGH)
NOTE(LINTLIBRARY)
NOTE(LINTED(message))
NOTE(NOTREACHED)
NOTE(PRINTFLIKE(n))
NOTE(PRINTFLIKE(func_name,n))
NOTE(PROTOLIB(n))
NOTE(SCANFLIKE(n))
NOTE(SCANFLIKE(func_name,n))
NOTE(VARARGS(n))
NOTE(VARARGS(func_name,n))
次の 2 つの指令は注釈としてのみ使用可能です。
NOTE(ALIGNMENT(func_name,n))
n=1,2,4,8,16,32,64,128; と指定すると
lint はあとに続く関数の結果を n バイトの境界整合に設 定
し ます。たとえば、malloc()はワード境界またはダブルワー
ド境界へのポインタを実際に戻す場合 に char* ま た は
void* を戻す関数として定義されます。
NOTE(ARGUNUSED(par_name[,par_name...]))
指定された引数に対して、lint はその使われ方を検査し ま
せ ん (このオプションは次に続く関数に対してのみ有効です
)。
lint はあるオプションを使用すると、エラーが起こった行位置 を
ポイントして正確なソースファイル内の行位置を表示できます。こ
の 機 能 を 有 効 に す る オ プ ショ ン は
-errfmt=[macro|simple|src|tab] です。このオプションを使用す
ると lint は次の情報を提供します。
o ソース行と位置
o マクロ展開
o エラーを起こす可能性のあるスタック
lint は最初の出力をソースファイル単位で生成します。 -s を 指
定 し ないと、取り込まれたファイルに関するメッセージが収集さ
れ、すべてのソースファイルが処理されたあとに出力されます。最
後に、 -C オプションまたは -c オプションを使用しないと、すべ
ての入力ファイルから収集された情報が集められ、その整合性が検
査されます。この時点で、メッセージの原因となったのが、ソース
ファイルなのか、取り込まれたファイルの 1 つなのかはっきり し
ない場合、ソースファイルの名前とその後ろに疑問符が出力されま
す。
-C オプション、 -c オプション、 -o オプションを使用する と、
複 数の C ソースファイルに対して順次 lint を実行し、結果をま
とめることができます。通常、各ソースファイルに対して 一 度、
-C オプションまたは -c オプションを使用して lint を起動しま
す。 lint を呼び出すたびに、処理を行なった .c ファイルに対応
す る .ln ファイルが作成され、そのソースファイルに関するメッ
セージだけが出力されます。すべてのソースファイルに対して別々
に lint を実行したあと、 -C オプションや -c オプションの代わ
りに、必要な -lx オプションとともにすべての .ln ファイルを指
定 して、lint をもう一度起動します。これにより、ファイル相互
間に存在するすべての矛盾が出力されます。この方法は、make; と
と も に 使用すると効果があります。make を使用すれば、一連の
ソースファイルに対して lint を実行したあと、一部のファイルを
変 更 した場合は、変更したファイルだけに linted を実行できま
す。
環境
TMPDIR 通常は /tmp ですが、環境変数 TMPDIR
を 設 定 し て 再 定 義 で き ます [
tmpnam(3S)のtempnamを参照してくだ さ
い ]。
NOTEPATH 注釈の定義ファイルがあるディレクトリ
のパスを、コンマで区切って指定したも
のです。『C ユーザーズガイド』を参照
してください。
ファイル
lint[12] 第 1 段階および第 2 段階
lint2n 拡張モードの第 2 段階
llib-lc.ln C ライブラリ関数の宣言 (バイナリ形式
)
$TMPDIR/*lint* 一時ファイル
関連項目
cc(1)、 make(1s)、 cflow(1)、 cxref(1)、
『C ユーザーズガイド』の lint の章を参照。