マニュアルページ 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 の章を参照。