C ユーザーズガイド

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.clint を実行します。


% lint -errfmt=src -Nlevel=2 Test1.c

結果として、次のような出力が得られます。


|  
      |static void cpv(char *s, char* v, unsigned n)
      |            ^  2 行目、Test1.C
      |  
      | cpv(argv[0], argc, strlen(argv[0]));
      |              ^  10 行目、Test1.c
不適切なポインタの減算
      |  
      |static void cpv(char *s, char* v, unsigned n)
      |                               ^  2 行目、Test1.c
      |  
      | cpv(argv[0], argc, strlen(argv[0]));
      |              ^  10 行目、Test1.c
      |  
      | *v++ = *s++;
      |  ^  5 行目、Test1.c
疑わしい方法で作成されたポインタを使用しています
        v, 定義された場所: Test1.c(2) :: Test1.c(5)
        呼び出しスタック:
                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.clint を実行します。


% lint -errfmt=macro Test2.c

結果として、次のような出力が得られます。


名前が定義されていますが使用されていません
    x                   Test2.c(4)

大域的に宣言されていますが静的 (static) にすることができます
    AR                  Test2.c(6)