lint(1)

名前
lint - C プログラムの検査

形式

lint
    [-#] [-###] [-a] [-b] [-Cfilename] [-c] [-dirout=dir] [-err=warn] [-errchk=l] [-errfmt=f] [-errhdr=h] [-erroff=t] [-errtags=a] [-errwarn=t] [-F] [-fd] [-flagsrc=file] [-h] [-Idir] [-k] [-Ldir] [-lx] [-m] [-Ncheck=c] [-Nlevel=n] [-n] [-ox] [-p] [-Rfile] [-s] [-u] [-V] [-v] [-Wfile] [-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 は、エラーメッセージや警告メッセージを出します。 検出する項目には、次のものがあります。
    •   到達できない文
    •   先頭から入っていないループ
    •   宣言されながら使用されない自動変数
    •   値が一定している論理式

lint は、ある場所では値を返しある場所では値を返さない関数、 引数の数や型が一定しない関数、 引数の値が使用されていない関数、値が使用されても何も返さない関数を検査します。

lint は 2 つのモードで動作します。基本モード は lint プログラムのデフォルトです。 拡張モード は 基本 lintモードで行うすべての操作を含み、加えて詳細なプログラムコードの 解析を行います。

拡張モードにおいては、 次の解析を行います。
    •   ソースプログラムの構造とフロー解析
    •   定数伝播と定数式の評価
    •   制御フローとデータフロー解析
    •   データ型の使われ方の解析

以上により、 拡張モードで lint は次の問題を 検出できます。
    •   使用されない #include 指令、変数、手続き
    •   メモリー解放後のメモリーの使われ方
    •   参照されない代入文
    •   初期化する前に参照される変数
    •   メモリーが割り当てられていない領域の解放
    •   定数データセグメントに書き込みをするポインタ
    •   違う値で再定義されるマクロ
    •   制御が到達しないコード
    •   使われ方が一致しない共用体内のメンバー型
    •   実引数の暗黙的キャスト

拡張モードは -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 で使用されるヘッダーファイルを検査します。

    %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 を指定した場合と同じになります。

-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  静的に宣言すべき外部シンボルに関するメッセージを抑止します。

-Ncheck=c
    対応する宣言があるかどうかヘッダファイルを検査します。マクロも検査します。 c はコンマで区切られた次のいずれかからなる検査項目の一覧です。

    macro
        ファイル間のマクロ定義に一貫性があるかどうか検査します。

    extern
        ソース間および関連するヘッダーファイルにおける宣言(たとえば、 file1.c および file1.hにおける宣言)が 1 対 1 に対応しているかどうか検査します。 ヘッダーファイルにふさわしくない宣言あるいは不足している extern 宣言がないか どうか確認します。

    %all
        Ncheck 検査のすべての項目を実行します。

    %none
        Ncheck 検査のいずれの項目も実行しません。 これがデフォルトです。

    no%macro  は
        Ncheck のマクロ検査を実行しません。

    no%extern
        Ncheck の extern 検査を実行しません。

    コンマを使用して値を結合します。たとえば、 -Ncheck=extern,macro となります。

    デフォルトは -Ncheck=%none です。 -Ncheck を指定すると -Ncheck=%all を指定した場合と同じになります。

-Nlevel=n
    問題を報告する際の解析レベルを指定します。 このオプションを使用すると検出するエラーの量を制御できます。 レベルが高くなると、検査時間も長くなります。 n は数字です。 1、2、3、または 4 を指定します。

    -Nlevel=1 1 つの手続きを解析します。プログラムの実行パス上で起きる無条件エラーを 報告します。大域データおよび制御フロー解析を行いません。

    -Nlevel=2 デフォルトです。大域データ、制御フローを含むプログラム全体を解析します。 プログラムの実行パス上で起きる無条件エラーを報告します。

    -Nlevel=3 -Nlevel=2 で行われる解析に加えて、定数伝播、実引数に定数が使用された場合の プログラム全体の解析を行います。

    この解析レベルで C プログラムの検証を行うと、前述のレベルより 2 倍から 4 倍多く時間がかかります。 lint は、プログラム変数用に可能な値のセットを作成して、プログラムの部分的な 解釈を仮定するので、時間が必要になります。 これらの変数セットは、プログラムで使用できる定数オペランドを含む 定数と条件文に基づいて作成されます。 セットは、その他のセットを作成するための基礎を形成します (定数伝播の形成)。解析結果として受け取ったセットは、以下のアルゴリズム に従って、誤りがないかどうかチェックされます。

    オブジェクトのすべての可能な値の中に正しい値が存在する場合は、 その値が今後の伝播の基礎として使用されます。 正しい値が存在しない場合は、エラーと診断されます。

    -Nlevel=4 -Nlevel=3 で行われる解析に加えて、プログラム全体の解析を行い、 プログラム実行パス上で起こる条件エラーを報告します。

    このレベルでは、付加的な診断メッセージが出力されます。解析アルゴリズムは -Nlevel=3 での解析アルゴリズムとほぼ同じですが、 すべての無効な値に対してエラーメッセージを生成する点が異なります。 このレベルでの解析に必要な時間は、最大２桁ほど増加する可能性 があります (だいたい 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  1 行づつに対して診断メッセージを出力します。 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=v9
    __sparcv9 マクロを事前定義し、lint ライブラリの v9 バージョンを検索します。

-XCC=a
    C++ 型のコメントを受け付けます。a は yes または no です。 / は特別に、コメントの始まりを指定するのに使用されます。デフォルトは、 -XCC=no です。 -XCC は、 -XCC=yes と同じ意味になります。

    注:
    -xc99=%none を使用する場合は、このオプションを使用してください。 -xc99=%all (デフォルト) の下では、// によって指定されたコメントを lint が受け入れます。

-Xc99=o
    -Xc99 フラグは、C99 規格 (ISO/IEC 9899:1999, Programming Language - C) から実装された機能に対するコンパイラの認識を制御します。

    o には次のうちの一つを指定できます: %all, %none。

    -Xc99=%none を指定すると C99 機能を認識しません。-Xc99=%all を指定するとサポートされた C99 機能を認識します。 -Xc99 を引数なしで指定することは、-Xc99=%all を指定した場合と同じです。

    注意事項:
    コンパイラのサポートレベルは、C ユーザーズガイド の付録 D に一覧表示された C99 の機能をデフォルトにしますが、 Solaris(TM) ソフトウェアにより提供される /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 を指定できます。 これはエラーにはなりません。

    次の例は、付加された引用符で囲まれた文字列リテラルを示しています。 -Xustr を指定するコマンド行も同様に示しています。

    example% cat file.c
    const unsigned short *foo = U"foo";
    const unsigned short bar[] = U"bar";
    const unsigned short *fun() { return U"fun"; }
    example% cc -Xustr=ascii_utf16_ushort file.c -c

-x  外部宣言によって参照される変数をレポート、使用しません。

-y  lint の対象になっているファイルを /*LINTLIBRARY*/ 指令または NOTE(LINTLIBRARY) 注釈が使用された場合のように扱います。 通常、lint ライブラリを作成する場合は、 /*LINTLIBRARY*/ 指令または 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 のみ)

これらの定義済みマクロはすべてのモードで有効です。
__sparc (SPARC のみ)
__i386 (x86 のみ)
__unix
__sun
__lint
__`uname -s` `_uname -r` (例: __SunOS_5_7)
__SVR4
__BUILTIN_VA_ARG_INCR
__SUNPRO_C=0x550
__RESTRICT (-Xa  および -Xt モードのみ)
__sparcv9 (-Xarch=v9)

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 は次の情報を提供します。
    •   ソース行と位置
    •   マクロ展開
    •   エラーを起こす可能性のあるスタック

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 の章を参照。