JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.3: C ユーザーガイド     Oracle Solaris Studio 12.3 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  C コンパイラの紹介

2.  C コンパイラ実装に固有の情報

3.  C コードの並列化

4.  lint ソースコード検査プログラム

4.1 基本 lint と拡張 lint

4.2 lint 使用方法

4.3 lint のコマンド行オプション

4.3.1 -#

4.3.2 -###

4.3.3 -a

4.3.4 -b

4.3.5 -C filename;

4.3.6 -c

4.3.7 -dirout=dir

4.3.8 -err=warn

4.3.9 -errchk=l(, l)

4.3.10 -errfmt=f

4.3.11 -errhdr=h

4.3.12 -erroff=tag(, tag)

4.3.13 -errsecurity=level

4.3.14 -errtags=a

4.3.15 -errwarn=t

4.3.16 -F

4.3.17 -fd

4.3.18 -flagsrc=file

4.3.19 -h

4.3.20 -Idir

4.3.21 -k

4.3.22 -Ldir

4.3.23 -lx

4.3.24 -m

4.3.25 -m32|-m64

4.3.26 -Ncheck=c

4.3.27 -Nlevel=n

4.3.27.1 -Nlevel=1

4.3.27.2 -Nlevel=2

4.3.27.3 -Nlevel=3

4.3.27.4 -Nlevel=4

4.3.28 -n

4.3.29 -ox

4.3.30 -p

4.3.31 -Rfile

4.3.32 -s

4.3.33 -u

4.3.34 -V

4.3.35 -v

4.3.36 -Wfile

4.3.37 -XCC=a

4.3.38 -Xalias_level[=l ]

4.3.39 -Xarch=amd64

4.3.40 -Xarch=v9

4.3.41 -Xc99[= o]

4.3.42 -Xkeeptmp=a

4.3.43 -Xtemp=dir

4.3.44 -Xtime=a

4.3.45 -Xtransition=a

4.3.46 -Xustr={ascii_utf16_ushort| no}

4.3.47 -x

4.3.48 -y

4.4 lint のメッセージ

4.4.1 メッセージを抑制するオプション

4.4.2 lint メッセージの形式

4.5 lint の指令

4.5.1 事前定義された値

4.5.2 指令

4.6 lint の参考情報と例

4.6.1 lint が行う診断

4.6.1.1 整合性の検査

4.6.1.2 移植性の検査

4.6.1.3 疑わしい言語構造

4.6.2 lint ライブラリ

4.6.3 lint フィルタ

5.  型に基づく別名解析

6.  ISO C への移行

7.  64 ビット環境に対応するアプリケーションへの変換

8.  cscope: 対話的な C プログラムの検査

A.  機能別コンパイラオプション

B.  C コンパイラオプションリファレンス

C.  ISO/IEC C 99 の処理系定義の動作

D.  C99 の機能

E.  ISO/IEC C90 の処理系定義の動作

F.  ISO C データ表現

G.  パフォーマンスチューニング

H.  Oracle Solaris Studio C: K&R C と ISO C の違い

索引

4.6 lint の参考情報と例

lint が行う検査、lint ライブラリ、および lint フィルタなどに関する lint の参考情報について説明します。

4.6.1 lint が行う診断

lint 固有 の診断は、矛盾した使い方、移植不能のコード、疑わしい言語構造の 3 つの広い条件カテゴリ に対して表示されます。この節では、これらのそれぞれの領域での lint の動作の例を確認し、それらが発生させる問題に可能な対応を推奨します。

4.6.1.1 整合性の検査

ファイル全域とファイル内部における変数、引数、関数の矛盾した使用を検査します。概して lint が古いスタイルの関数に対して検査していたのと同様に、プロトタイプの使用、宣言、引数を検査します。プログラムが関数プロトタイプを使用していない場合、lint は関数の呼び出しごとにコンパイラより厳しく引数の数と型を検査します。lint は、[fs]printf()[fs]scanf() の制御文字列の変換指示子と引数の不一致も識別します。

例:

4.6.1.2 移植性の検査

一部の移植不可能なコードは、lint のデフォルトの動作によってフラグを付けられます。また、ほかにも少数の状況で、 -p または -Xc を指定して lint を起動すると、診断されることがあります。lint は ISO C 規格に一致しない言語構造を検査します。-p および -Xc のもとで発行されるメッセージに関しては、「4.6.2 lint ライブラリ」を参照してください。

例:

4.6.1.3 疑わしい言語構造

lint は、プログラマが意図したことを表現していない可能性がある、言語構造上は正しい箇所にフラグを付けます。例:

4.6.2 lint ライブラリ

lint ライブラリを使用して、呼び出したライブラリ関数とプログラムとの互換性 (関数戻り型の宣言、関数が期待する引数の数と型など) を検査できます。標準 lint ライブラリは、C 言語処理系で供給されるライブラリに対応し、一般にはシステムの標準位置であるディレクトリに格納されています。慣例では、lint ライブラリは llib-lx.ln という形の名前を持ちます。

lint 標準 C ライブラリ、llib-lc.ln は、lint コマンド行の末尾にデフォルトで追加されます。それとの互換性の検査は、-n オプションを呼び出すことで抑制すできます。そのほかの lint ライブラリは、-l に対して引数として指定することでアクセスされます。この例では、lint ライブラリ llib-lx.ln との互換性について、file1.cfile2.c 内の関数と変数の使用法を調べるよう lint に指示します。

% lint -lx file1.c file2.c

定義だけからなるライブラリファイルは、厳密に通常のソースファイルおよび通常の .ln ファイルとして処理されます。ただし、ライブラリファイル内で関数と変数が矛盾した状態で使用されるか、またはライブラリファイルで定義されているけれどもソースファイルで使用されない関数と変数に対しては警告を出しません。

自分の lint ライブラリを作成するには、C ソースファイルの先頭に NOTE(LINTLIBRARY) 指令を挿入し、次いで -o オプションとそのライブラリ名を与える -l オプションとともにそのファイルに対して lint を実行してください。次の例では、NOTE(LINTLIBRARY) が先頭にあるソースファイル内の定義のみが、ファイル llib-lx.ln に書き込まれます。

% lint -ox file1.c file2.c

lint -occ -o は類似しています。ライブラリは、同様に関数プロトタイプ宣言のファイルから作成できます。ただし、NOTE(LINTLIBRARY)NOTE(PROTOLIB(n)) の両方が宣言ファイルの先頭に挿入されている必要があります。n が 1 の場合、プロトタイプ宣言は古いスタイルの定義と同様にライブラリ .ln ファイルに書き込まれます。n がデフォルトの 0 の場合、処理はキャンセルされます。-y を指定して lint を呼び出しても、lint ライブラリを作成することができます。次のコマンド行の場合は、その行に指定された各ソースファイルが NOTE(LINTLIBRARY) で開始しているかのように扱われ、その定義だけが llib-lx.ln に書き込まれます。

% lint -y -ox file1.c file2.c

デフォルトでは、lint は標準位置で lint ライブラリを検索します。標準位置以外のディレクトリで lint ライブラリを検索するように lint に指示するには、-L オプションを使用してディレクトリのパスを指定します。

% lint -Ldir -lx file1.c file2.c

拡張モードでは、lint は基本モードで生成される .ln ファイルより多くの情報が格納された .ln ファイルを生成します。拡張モードの lint は、基本モードまたは拡張モードのどちらの lint で生成された .ln ファイルでもすべて読み取って理解することができます。基本モードの lint は、基本モードの lint を用いて生成された .ln ファイルだけを読み取って理解することができます。

デフォルトでは、lint/usr/lib ディレクトリのライブラリを使用します。これらのライブラリは基本 lint 形式です。makefile を一度実行して新しい形式の拡張 lint ライブラリを作成すれば、拡張 lint をより効率的に利用することができます。makefile を実行して新しいライブラリを作成するには、次のコマンドを使用してください。

% cd install-directory/prod/src/lintlib; make

ここで、install-directory はインストールディレクトリです。makefile の実行後、lint/usr/lib ディレクトリ内のライブラリの代わりに、拡張モードの新しいライブラリを使用します。

指定されたディレクトリが標準の場所の前に検索されます。

4.6.3 lint フィルタ

lint フィルタは、プロジェクト固有のポストプロセッサで、通常は awk スクリプトや類似のプログラムを使用して lint の出力を読み取り、プロジェクトが特に真の問題を識別していないと判断したメッセージを捨てます。たとえば、ときどきまたは常に無視される値を返す文字列関数などです。lint オプションと指令が出力に対して十分な制御が提供しないときは、lint フィルタはカスタマイズされた診断レポートを生成します。

lint の 2 つのオプションはフィルタを開発する際に特に役立ちます。