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.4 lint のメッセージ

大部分の lint のメッセージは簡単な 1 行の文で、問題が起こって診断されるたびに出力されます。インクルードファイルで検出されたエラーはコンパイラによって複数回報告されますが、lint によってはそのファイルがほかのソースファイルに何度インクルードされても一度報告されるだけです。複合メッセージは、ファイル全域の矛盾に対して、また時にはファイル内の問題に対しても表示されます。単一メッセージは、検査しているファイルで問題が発生するごとに知らせます。lint フィルタを使用することで、発生ごとにメッセージの出力が必要になるときは、-s オプションを使用して lint を呼び出すことにより、複合メッセージを単純なタイプに変換できます。詳細は、「4.6.2 lint ライブラリ」を参照してください。

lint のメッセージは stderr に書き込まれます。

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

いくつかの lint オプションを使用して、lint 診断メッセージを抑制できます。メッセージは、-erroff オプションのあとに 1 つ以上の タグ を指定することで抑制できます。これらのニーモニックタグは、-errtags=yes オプションで表示することができます。

次の表に lint のメッセージを抑制するオプションを示します。

表 4-8 メッセージを抑制する lint オプション

オプション
抑制されるメッセージ
-a
代入によって暗黙的により小さい型に変換されます

より大きな整数型への変換は符号拡張が不正確になる可能性があります

-b
到達できない文です
-h
等価演算子 "==" の使用が想定される場所に代入演算子 "=" が使用されています

演算子のオペランドが定数です: "!"

case 文を通り抜けます

ポインタのキャストによって境界整列が不正確になる可能性があります

優先度が混乱する可能性があります; 括弧

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

文が帰結していません: else

-m
大域的に宣言されていますが静的 (static) にすることができます
-erroff=tag
タグで指定した 1 つまたは複数の lint メッセージ
-u
名前が定義されていますが使用されていません

未定義の名前が使用されています

-v
引数が関数中で使用されていません
-x
名前が宣言されていますが使用も定義もされていません

4.4.2 lint メッセージの形式

lint プログラムに特定のオプションを付けると、エラーが発生した行へのポインタを付けて、ソースファイルの正確な行が示されます。この機能を有効化するオプションは -errfmt=f で、lint から次の情報が提供されます。

たとえば、次に示すプログラム Test1.c にはエラーがあります。

1 #include <string.h>
2 static void cpv(char *s, char* v, unsigned n)
3 { int i;
4   for (i=0; i<=n; i++){
5        *v++ = *s++;}
6 }
7 void main(int argc, char* argv[])
8 {
9     if (argc != 0){
10        cpv(argv[0], argc, strlen(argv[0]));}
11}

Test1.c に対して lint—errfmt=src オプション付きで使用すると、次の出力が生成されます。

% lint -errfmt=src -Nlevel=2 Test1.c
      |static void cpv(char *s, char* v, unsigned n)
      |            ^  line 2, Test1.c
      |
      |         cpv(argv[0], argc, strlen(argv[0]));
      |                      ^  line 10, Test1.c
warning: improper pointer/integer combination: arg #2
      |
      |static void cpv(char *s, char* v, unsigned n)
      |                               ^  line 2, Test1.c
      |
      |cpv(argv[0], argc, strlen(argv[0]));
      |                       ^ line 10, Test1.c
      |
      |        *v++ = *s++;
      |         ^  line 5, Test1.c
warning:use of a pointer produced in a questionable way
    v defined at Test1.c(2)    ::Test1.c(5)
      call stack:
          main()                ,    Test1.c(10)
          cpv()                 ,    Test1.c(5)

1 つめの警告は、2 つのコード行の間で矛盾があることを示しています。2 つめの警告には、コールスタックとエラーになるまでの制御フローが表示されます。

次に示すプログラム Test2.c には、前述のものとは異なる種類のエラーがあります。

1 #define AA(b) AR[b+l]
2 #define B(c,d) c+AA(d)
3
4 int x=0;
5
6 int AR[10]={1,2,3,4,5,6,77,88,99,0};
7
8 main()
9  {
10  int y=-5, z=5;
11  return B(y,z);
12 }

Test2.c に対して lint—errfmt=macro オプション付きで使用すると、次の出力が生成され、マクロ置換の手順が表示されます。

% lint -errfmt=macro Test2.c
      | return B(y,z);
      |        ^  line 11, Test2.c
      |
      |#define B(c,d) c+AA(d)
      |                 ^  line 2, Test2.c
      |
      |#define AA(b) AR[b+l]
      |                   ^  line 1, Test2.c
error: undefined symbol: l
|
      |    return B(y,z);
      |           ^  line 11, Test2.c
      |
      |#define B(c,d) c+AA(d)
      |                 ^  line 2, Test2.c
      |
      |#define AA(b) AR[b+l]
      |                   ^  line 1, Test2.c
variable may be used before set: l
lint: errors in Test2.c; no output created
lint: pass2 not run - errors in Test2.c