ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: C ユーザーガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
lint プログラムは、静的なアナライザです。そのため、検出した依存性に関する実行時の結果を評価できません。たとえば、特定のプログラム内に到達不可能な break 文が数百個含まれており、それらは重要度が低いにもかかわらず、lint によってフラグが付けられるものとします。たとえば、lint のコマンド行オプションやソーステキスト内にコメントとして埋め込まれる特殊な指令を、次のように使用できます。
柑-b オプションを指定して lint を呼び出すと、到達不可能な break 文に関するすべてのエラーメッセージが抑制されます。
到達不可能な文に対する診断を抑制するには、コメント /*NOTREACHED*/ をその文の前に付けます。
lint のオプションを次にアルファベット順に説明します。いくつかの lint オプションは、lint 診断メッセージの抑制に関連しています。アルファベット順の説明のあと、表 4-8 にこれらのオプションとそれが抑制するメッセージの一覧を示します。拡張 lint を呼び出すオプションは -N で始まります。
lint は、-A、-D、-E、-g、-H、-O、-P、-U、-Xa、-Xc、-Xs、-Xt、-Y を含む多くの cc コマンド行オプションを認識しますが、-g と -O は無視します。認識されないオプションがあると警告が出され、そのオプションは無視されます。
冗長モードを有効にし、呼び出されるときに各構成要素を表示します。
呼び出すごとに各構成要素を表示しますが、実際には実行しません。
一定のメッセージを抑制します。表 4-8 を参照してください。
一定のメッセージを抑制します。表 4-8 を参照してください。
指定されたファイル名を持つ .ln ファイルを作成します。これらの .ln ファイルは lint の最初のパスだけで作成されます。filename; は絶対パス名でもかまいません。
コマンド行で指定された .c ファイルごとに、lint の第 2 パスに関連する情報からなる .ln ファイルを作成します。第 2 パスは実行されません。
lint 出力ファイル (.ln ファイル) を入れるディレクトリを指定します。このオプションは -c オプションに影響を与えます。
-err=warn は -errwarn=%all のマクロです。「4.3.15 -errwarn=t」を参照してください。
l で指定した検査を実行します。デフォルトは、-errchk=%none です。-errchk を指定するのは、-errchk=%all を指定するのと同じです。l は、次の表の 1 つ以上のフラグ (-errchk=longptr64,structarg など) から成るコンマ区切り検査リストです。
表 4-1 -errchk のフラグ
|
lint 出力の書式を指定します。f には、macro、simple、src、tab のいずれか 1 つを指定できます。
表 4-2 -errfmt のフラグ
|
デフォルトは -errfmt=tab です。-errfmt だけを指定すると、-errfmt=tab を指定するのと同じことになります。
複数の書式を指定すると最後に指定した書式が使用され、lint は使用されない書式について警告を出します。
-Ncheck も指定すると、lint でヘッダーファイルの一定のメッセージレポート作成ができます。h には、次の 1 つまたは複数の項目をコンマで区切って指定します。dir、no%dir、%all、%none、%user
表 4-3 -errhdr のフラグ
|
デフォルトは -errhdr=%none です。-errhdr だけを指定すると、-errhdr=%user を指定するのと同じことになります。
例:
% lint -errhdr=inc1 -errhdr=../inc2
ディレクトリ inc1 と ../inc2 内で使用されているヘッダーファイルを検査します。
% lint -errhdr=%all,no%../inc
ディレクトリ ../inc 内のものを除き、使用されているすべてのヘッダーファイルを検査します。
t には、次の 1 つまたは複数の項目をコンマで区切って指定します。tag、no%tag、 %all、%none。
表 4-4 -erroff のフラグ
|
デフォルトは -erroff=%none です。-erroff と指定すると、-erroff=%all を指定した場合と同じ結果が得られます。
例:
% lint -erroff=%all,no%E_ENUM_NEVER_DEF,no%E_STATIC_UNUSED
「列挙型が定義されていません」と「静的シンボルが使用されていません」のメッセージだけを出力し、その他のメッセージは抑制します。
% lint -erroff=E_ENUM_NEVER_DEF,E_STATIC_UNUSED
「列挙型が定義されていません」と「静的シンボルが使用されていません」のメッセージだけを抑制します。
-errsecurity オプションを使用して、コードのセキュリティーに問題がないか検査することができます。
level は、次の表に示す値のいずれかでなければいけません。
表 4-5 -errsecurity のフラグ
|
-errsecurity の値が指定されていない場合は、-errsecurity=%none に設定されます。-errsecurity は指定されているが、引数が指定されていない場合は、-errsecurity=standard に設定されます。
各エラーメッセージのメッセージタグを表示します。a には yes または no のいずれかを指定します。デフォルトは -errtags=no です。-errtags だけを指定すると、-errtags=yes を指定するのと同じことになります。
すべての -errfmt オプションに使用できます。
指定された警告メッセージが表示された場合、lint はエラーステータスを返して終了します。t には、次の 1 つまたは複数の項目をコンマで区切って指定します。tag、no%tag、%all、%none。タグの順番が重要です。たとえば、%all,no%tag は、tag 以外の警告が発行されると、lint が致命的なステータスで終了します。-errwarn の値を次の表に示します。
表 4-6 -errwarn のフラグ
|
デフォルトは -errwarn=%none です。-errwarn のみを指定することは、-errwarn=%all と同等です。
コマンド行で指定された .c ファイルを参照するとき、そのベース名ではなくコマンド行に与えられたパス名を出力します。
ファイル中に格納されたオプションを用いて lint を実行します。ファイルには、1 行に 1 つずつ、複数のオプションを指定できます。
一定のメッセージを抑制します。表 4-8 を参照してください。
インクルード用ヘッダーファイルをディレクトリから検索します。
/* LINTED [メッセージ] */ 指令または注釈 NOTE(LINTED(message)) の動作を変更します。通常 lint は、前述のような指令のあとにコードが続く場合、警告メッセージを抑制します。lint は、メッセージを抑制する代わりに、指令または注釈の中のコメントを含むメッセージを出力します。
-l とともに使用し、ディレクトリの lint ライブラリを検索します。
lint ライブラリ llib-lx.ln にアクセスします。
一定のメッセージを抑制します。表 4-8 を参照してください。
分析するプログラムのメモリーモデルを指定します。また、選択したメモリーモデル (32 ビットまたは 64 ビット) に対応する lint ライブラリを検索します。
32 ビット C プログラムの確認には -m32 を使用し、64 ビット C プログラムの確認には -m64 を使用します。
ILP32 メモリーモデル (32 ビット int、long、ポインタデータ型) は 64 ビット対応ではないすべての Oracle Solaris プラットフォームおよび Linux プラットフォームのデフォルトです。LP64 メモリーモデル (64 ビット long、ポインタデータ型) は 64 ビット対応の Linux プラットフォームのデフォルトです。-m64 は LP64 モデルに対応しているプラットフォームでのみ許可されます。
以前のリリースのコンパイラでは、メモリーモデル、ILP32 または LP64 は、-Xarch オプションを選択して指定されていました。Oracle Solaris Studio 12 コンパイラからは、この動作は本当ではなくなりました。ほとんどのプラットフォームでは、コマンド行に -m64 を追加するだけで 64 ビットプログラムで lint を実行することができます。
ヘッダーファイル内で対応する宣言を検査し、マクロを検査します。c は、macro、extern、%all、%none、no%macro、no%extern の 1 つ以上の項目で構成されるコンマ区切りのリストです。
表 4-7 -Ncheck のフラグ
|
デフォルトは -Ncheck=%none です。-Ncheck だけを指定すると、-Ncheck=%all を指定するのと同じことになります。
-Ncheck=extern,macro のように、値をコンマで結合してもかまいません。
次の例は、マクロ検査以外のすべての検査を実行します。
% lint -Ncheck=%all,no%macro
拡張 lint 解析のレベルを指定することによって、問題報告の拡張 lint モードを有効にします。このオプションは、検出されるエラーの量の制御を提供します。レベルが高いほど検証にかかる時間は長くなります。n は数値で、1、2、3、4 のいずれかです。デフォルトはありません。-Nlevel が指定されなかった場合は、lint の基本解析モードが使用されます。引数なしで -Nlevel が指定された場合は、-Nlevel=4 に設定されます。
基本および拡張 lint モードについては、「4.2 lint 使用方法」を参照してください。
個々の手続きを解析します。いくつかのプログラムの実行パスで発生する無条件エラーを報告します。大域的なデータおよび制御のフロー解析は行いません。
大域的なデータおよびフローを含め、プログラム全体を解析します。いくつかのプログラムの実行パスで発生する無条件エラーを報告します。
-Nlevel=2 で実行される解析に加えて、定数の伝播 (定数が実際の引数として使用されている場合) を含め、プログラム全体を解析します。
この解析レベルでの C プログラムの検査は、前述のレベルより 2 倍から 4 倍長い時間がかかります。これは、lint がプログラムの変数に対して取り得る値の集合を作成し、プログラムの部分解釈を行うためです。これらの変数値の集合は、定数と、プログラムで使用可能な定数オペランドを含む条件文に基づいて作成され、ほかの集合 (定数伝播の形式) を作成するときの基準になります。
そのあと、解析の結果として受け取った集合は、次のアルゴリズムに従って誤りがないか評価されます。
オブジェクトが取り得る値の集合の中に正しい値が存在する場合は、その値が次の伝搬の基準として使用されます。正しい値が存在しない場合は、エラーと診断されます。
-Nlevel=3 で実行される解析に加えて、プログラム全体を解析して一定のプログラム実行パスが使用された場合に発生する条件付きエラーも報告します。
この解析レベルでは、さらに多くの診断メッセージが出力されます。一般的に、この解析アルゴリズムは、不正な値に対してエラーメッセージが生成されることを除けば、-Nlevel=3 の解析アルゴリズムと同じです。このレベルでの解析に要する時間は、2 桁ほど増加する可能性があります (約 20 倍から 100 倍遅い)。この場合、余分な所要時間は、再帰や条件文などで特徴づけられるプログラムの複雑さに直接比例します。結果として、100,000 行を超えるプログラムでこのレベルの解析を使用するのは困難である可能性があります。
デフォルトの lint 標準ライブラリとの互換性検査を抑制します。
lint は llib-lx.ln という名前の lint ライブラリを作成します。このライブラリは、lint が第 2 パスで使用する .ln ファイルから作成されます。-c オプションを使用すると、すべての -o オプションが無効になります。不要なメッセージを表示しないで llib-lx.ln を作成するには、-x オプションを使用します。lint ライブラリのソースファイルが外部インタフェースだけである場合は、-v オプションが便利です。作成された lint ライブラリは、あとで lint が -lx で呼び出された場合に使用することができます。
デフォルトでは、ライブラリは lint の基本形式で作成されます。拡張 lint モードを使用した場合は、ライブラリは拡張モードで作成されるため、それ以外のモードでは使用できなくなります。
cxref(1) で使用する .ln ファイルをファイルに書き込みます。拡張モードがオンに切り替えられている場合、このオプションは無効にします。
「警告:」または「エラー:」で始まる単一の診断メッセージを生成します。デフォルトでは、lint は複合的な出力を生成するためにいくつかのメッセージをバッファリングします。
一定のメッセージを抑制します。表 4-8 を参照してください。このオプションは、大型プログラムのファイルの一部分に対して lint を実行する場合に適しています。
一定のメッセージを抑制します。表 4-8 を参照してください。
cflow(1) で使用する .ln ファイルをファイルに書き込みます。拡張モードがオンに切り替えられている場合、このオプションは無効にします。
C++ 形式のコメントを受け入れます。このオプションを使用すると、// を使用してコメントの始まりを示すことができます。a には yes または no のいずれかを指定します。デフォルトは -XCC=no です。-XCC だけを指定すると、-XCC=yes を指定するのと同じことになります。
注 - -xc99=none を使用する場合のみ、このオプションを指定する必要があります。デフォルトの -xc99=all では、lint は // で指定したコメントを受け入れます。
このオプションの l は、 any、basic、weak、layout、strict、std、strong のいずれか 1 つです。各レベルの明確化の詳細については、表 B-13 を参照してください。
-Xalias_level を指定しない場合、フラグのデフォルトは -Xalias_level=any です。これは、型に基づく別名解析が実行されないことを意味します。-Xalias_level を指定してもレベルを設定しない場合、デフォルトは -Xalias_level=layout になります。
lint を実行するときの明確化のレベルは、コンパイラを実行するときのレベルよりも緩やかにしてください。明確化のレベルをコンパイルするときのレベルより厳しくして lint を実行すると、結果は解釈するのが困難になり、誤解を招く恐れがあります。
明確化の詳細と、明確化を支援するために作成されたプラグマのリストについては、「4.6.3 lint フィルタ」を参照してください。
(Solaris オペレーティングシステム) 推奨されていません。使用しないでください。「4.3.25 -m32|-m64」を参照してください。
(Solaris オペレーティングシステム) 推奨されていません。使用しないでください。「4.3.25 -m32|-m64」を参照してください。
-Xc99 フラグは、C99 規格 (『Programming Language - C (ISO/IEC 9899:1999)』) からの実装機能に対するコンパイラの認識状況を制御します。
o には、次のいずれかを指定します。all、none。
-Xc99=none は、C99 機能の認識を無効にします。-Xc99=all は、サポートされている C99 機能の認識を有効にします。
引数を付けずに -Xc99 を発行すると、-Xc99=all と同じ結果になります。
注 - コンパイラサポートレベルは、表 C-6 でリストしている C99 の機能がデフォルトですが、Oracle Solaris が提供する /usr/include の標準ヘッダーファイルは、1999 ISO/IEC C 規格にまだ準拠していません。エラーメッセージが生成される場合は、-Xc99=none を指定して、前述のヘッダー用に 1990 ISO/IEC C 規格を使用してみてください。
lint の実行中、一時ファイルを自動的に削除せず、作成した状態のままにします。a には yes または no のいずれかを指定します。デフォルトは -Xkeeptmp=no です。-Xkeeptmp だけを指定すると、-Xkeeptmp=yes を指定するのと同じことになります。
一時ファイルのディレクトリをディレクトリに設定します。このオプションを指定しないと、一時ファイルは /tmp に格納されます。
各 lint パスの実行時間を報告します。a には yes または no のいずれかを指定します。デフォルトは -Xtime=no です。-Xtime だけを指定すると、-Xtime=yes を指定するのと同じことになります。
K&R C と Oracle Solaris Studio ISO C との間の相違について警告を発行します。a は yes または no が可能です。デフォルトは -Xtransition=no です。-Xtransition だけを指定すると、-Xtransition=yes を指定するのと同じことになります。
このオプションは、U"ASCII 文字列" 書式の文字列リテラルの認識を unsigned short int の配列として有効にします。デフォルトは -Xustr=no で、U"ASCII 文字列" 文字列リテラルのコンパイラ認識を無効にします。-Xustr=ascii_utf16_ushort は、U"ASCII 文字列" 文字列リテラルのコンパイラ認識を有効にします。
一定のメッセージを抑制します。表 4-8 を参照してください。
コマンド行で指定されたすべての .c ファイルを、/* LINTLIBRARY */ 指令で開始した場合または注釈 NOTE(LINTLIBRARY) が付いている場合と同じように扱います。lint ライブラリは、通常、/* LINTLIBRARY */ 指令または注釈 NOTE(LINTLIBRARY) を使用して作成します。