4.5 lint の指令
4.5.1 事前定義された値
lint を実行すると、lint トークンが事前定義されます。事前定義されたトークンのリストについては、cc(1) のマニュアルページも参照してください。
4.5.2 指令
lint 指令を /*...*/ の形式で注釈として表記する方法は、現在サポートされていますが、将来はサポートされなくなる予定です。指令を注釈として挿入する際は、ソースコードの注釈 NOTE(...) として表記することをお勧めします。
次のようにファイル note.h をインクルードして、lint 指令をソースコードの注釈として指定してください。
#include <note.h>
lint は、ソースコードの注釈を別のツールと共有します。Solaris Studio C コンパイラをインストールすると、/usr/lib/note/SUNW_SPRO-lint ファイルが自動的にインストールされます。このファイルには、LockLint が認識する注釈の名前がすべて記述されています。ただし、Solaris Studio C のソースコードを検査する lint は、/usr/lib/note
と 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* を返すように定義されていますが、実際にはワードで、または場合によってはダブルワードで整列したポインタを返します。 不正な境界整列に関するメッセージが抑制されます。
|
NOTE(ARGSUSED(n))/*ARGSUSEDn*/ |
指令の次に来る関数に対して、 -v
オプションのような動作を行います。 次のメッセージが抑制されます。指令のあとに来る関数定義の最初の n 個以降のすべての引数を対象します。デフォルトは 0 です。NOTE 形式の場合は、必ず n を指定します。
|
NOTE(ARGUNUSED(引数[,引数...])) |
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 */ も使用できます。
|
NOTE(LINTED (メッセージ))/*LINTED [メッセージ]*/ |
使用されない変数または関数に関する警告を除く、ファイル内の警告をすべて抑制します。この指令は、 lint の警告が表示された行の直前で指定します。 -k オプションは、 lint がこの指令を扱う方法を変更します。 lint は、メッセージを抑制する代わりに、コメントに含まれているメッセージがある場合は、そのメッセージを表示します。この指令は、lint
実行後にフィルタを行うための -s オプションと組み合わせて使用すると便利です。 -k が指定されない場合、指令のあとに来るコード行の次のもの以外のファイル内問題に属するすべての警告を抑制します。
|
NOTE(LINTLIBRARY)/*LINTLIBRARY*/ |
-o が指定された場合、この指令が先頭に付く .c ファイル中の定義だけをライブラリ .lnファイルに書き込みます。ファイル内で使用されない関数および関数の引数に関する内容を抑制します。 |
NOTE(NOTREACHED)/*NOTREACHED*/ |
到達不可コードに関するコメントを適切な時点で停止します。このコメントは、通常、 exit(2) などの、関数に対するコールの直後に位置します。 次のメッセージが抑制されます。
|
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 を指定します。
|
|