Oracle® Solaris Studio 12.4: C ユーザーガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

4.5.2 指令

/*...*/ の形式での lint 指令は、既存の注釈ではサポートされていますが、将来の注釈ではサポートされなくなる予定です。指令を注釈として挿入する際は、ソースコードの注釈 NOTE(...) として表記することをお勧めします。

次のようにファイル note.h をインクルードして、lint 指令をソースコードの注釈として指定してください。

#include <note.h>

lint は、ソースコード注釈方式をほかのいくつかのツールと共有します。Oracle Solaris Studio C コンパイラをインストールすると、/usr/lib/note/SUNW_SPRO-lint ファイルも自動的にインストールされ、LockLint が理解するすべての注釈の名前がそこに含まれます。ただし、Oracle Solaris Studio C ソースコードチェッカー lint は、/usr/lib/note と Oracle Solaris Studio のデフォルトの場所 install-directory/prod/lib/note 内ですべてのファイルのすべての有効な注釈を検査します。

次のように、環境変数 NOTEPATH を設定することにより、/usr/lib/note 以外の位置を指定することもできます。

setenv NOTEPATH $NOTEPATH:other_location

次の表に、lint 指令と動作を示します。

表 4-9  lint の指令
指令
アクション
NOTE(ALIGNMENT(fname,n)) n=1, 2, 4, 8, 16, 32, 64, 128
lint に関数結果を n バイトで整列させます。たとえば、malloc() は、char* または void* を返すように定義されていますが、実際には word、または場合によっては doubleword で整列されたポインタを返します。
不正な境界整列に関するメッセージが抑制されます。
  • 不正確な境界整列

NOTE(ARGSUSED(n))
/*ARGSUSEDn*/
指令の次に来る関数に対して、-v オプションのような動作を行います。
そのあとに来る関数定義の最初の n 個以降のすべての引数を対象として、次のメッセージが抑制されます。デフォルトは 0 です。NOTE 形式の場合は、必ず n を指定します。
  • 引数が関数中で使用されていません

NOTE(ARGUNUSED
(par_name[,par_name...]))
lint が、指定した引数の使用状況を検査しないようにします (このオプションは、指令の次に来る関数に対してのみ有効です)。
NOTE または指令で指定された引数すべてを対象して、次のメッセージが抑制されます。
  • 引数が関数中で使用されていません

NOTE(CONSTCOND)
/*CONSTCOND*/
条件式中の定数オペランドに関する警告を抑制します。次のメッセージが抑制されます。
NOTE(CONSTANTCONDITION)/* CONSTANTCONDITION */ も使用できます。
条件のコンテキストに定数があります
演算子のオペランドが定数です: "!"
論理式が常に偽です:演算子 "&&"
論理式が常に真です:演算子 "||"
NOTE(EMPTY) /*EMPTY*/
if 文に続く null 文の内容に関する警告を抑制します。この指令は、条件式のあと、セミコロンの前に置くべきです。この指令は、有効な else 文を持つ空の if 文をサポートするためにあります。また、空の else 文に対するメッセージも抑制します。
次のメッセージが抑制されます (if の条件式とセミコロンの間に挿入された場合)。
  • 文が帰結していません: else

    (else 文とセミコロンの間に挿入された場合)

  • 文が帰結していません: if

NOTE(FALLTHRU)
/*FALLTHRU*/
case 文または default ラベルの文までの通り抜けに関する警告を抑制します。この指令は、ラベルの直前で指定します。
次のメッセージが抑制されます。指令のあとに来る case 文が対象となります。NOTE(FALLTHROUGH) または /* FALLTHROUGH */ も使用できます。
  • case 文を通り抜けます

NOTE(LINTED (メッセージ))
/*LINTED [メッセージ]*/
使用されない変数または関数に関する警告を除く、ファイル内の警告をすべて抑制します。この指令は、lint の警告が表示された行の直前で指定します。-k オプションは、lint がこの指令を扱う方法を変更します。lint は、メッセージを抑制する代わりに、コメントに含まれているメッセージがある場合は、そのメッセージを表示します。この指令は、lint 実行後にフィルタを行うための -s オプションと組み合わせて使用すると便利です。
-k が指定されない場合、指令のあとに来るコード行の次のもの以外のファイル内問題に属するすべての警告を抑制します。
  • 引数が関数中で使用されていません

  • 宣言がブロック中で使用されていません

  • 変数が関数中で設定されていますが使用されていません

  • 静的シンボルが使用されていません

  • 変数が関数中で使用されていません

    先行するコード行では、メッセージは無視されます。

NOTE(LINTLIBRARY)
/*LINTLIBRARY*/
-o が呼び出されると、それが先頭にある .c ファイル内の定義だけをライブラリ .lnファイルに書き込みます。この指令は、このファイル内で使用されていない関数および関数引数に関するメッセージを抑制します。
NOTE(NOTREACHED)
/*NOTREACHED*/
到達不可コードに関するコメントを適切な時点で停止します。このコメントは、通常、exit(2) などの、関数に対するコールの直後に位置します。
次のメッセージが抑制されます。
  • 到達できない文です

    指令のあとに来る到達されない文が対象の場合。

  • case 文を通り抜けます

    そのあとの case 文で、その前の case 文から到達されないものが対象の場合。

  • 関数が値を返さずに終了しています

NOTE(PRINTFLIKE(n))
NOTE(PRINTFLIKE(fun_name,n))
/*PRINTFLIKEn*/
指令のあとに来る関数定義の第 n 番目の引数を [fs]printf() の書式文字列として扱い、後述のメッセージを有効にします。残りの引数と変換指示子の間の不整合も対象にします。lint はデフォルトで、標準 C ライブラリで提供される [fs]printf() 関数を呼び出すときのエラーに対してこれらの警告を出します。
NOTE 形式の場合は、必ず n を指定します。
  • 書式文字列の形式が正しくありません

    その引数に指定されている変換が無効な場合、および書式に矛盾する関数引数型の場合

  • 書式から参照される引数が足りません

  • 書式から参照される引数が多すぎます

NOTE(PROTOLIB(n))
/*PROTOLIBn*/
n が 1 で NOTE(LINTLIBRARY) または /* LINTLIBRARY */ が使用されるとき、それが先頭にある .c ファイル内の関数プロトタイプ宣言だけをライブラリ .ln ファイルに書き込みます。デフォルトは処理を取り消す 0 です。
NOTE 形式の場合は、必ず n を指定します。
NOTE(SCANFLIKE(n))
NOTE(SCANLIKE(fun_name,n))
/*SCANFLIKEn*/
関数定義の第 n 番目の引数が [fs]scanf() の書式文字列として扱われること以外は NOTE(PRINTFLIKE(n)) または /* PRINTFLIKEn */ と同じです。デフォルトでは、lint は標準 C ライブラリで提供される [fs]scanf() 関数を呼び出すときのエラーに対し警告を出します。
NOTE 形式の場合は、必ず n を指定します。
NOTE(VARARGS(n))
NOTE(VARARGS(fun_name,n))
/*VARARGSn*/
指令のあとに来る関数宣言の中の可変数の引数を検査する通常の処理を抑制します。最初の n 個の引数のデータ型を検査します。n が指定されていない場合は、n= 0 とみなします。新規のコードを書く場合やコードを更新する場合、定義の中で末尾に省略記号 (...) を使用することを推奨します。
この指令の直後で定義されている関数に関しては、次のメッセージが抑制されます。n 以上の引数を持つ関数に対する呼び出しを対象にします。NOTE 形式の場合は、必ず n を指定します。
  • 可変数の引数で関数が呼び出されています