ローカルプログラムの解析

スタティックの検証では、コンパイラーは各プログラムユニットを個別に解析し、ユーザープログラムのあらゆる種類のエラー、警告、または問題点をチェックします。次に例を示します。

以下は、ローカルプログラム解析の例です。

例 1: オブジェクトが必要なサイズに満たない

"chess.h" ファイルには、次の行が含まれています。

278    typedef struct {

279        int path[MAXPLY];

280        unsigned char path_hashed;

281        unsigned char path_length;

282        unsigned char path_iteration_depth;

283    } CHESS_PATH;

initdata.h ファイルには、次の行が含まれています。

237      CHESS_PATH     pv[MAXPLY];

quiesce.c ファイルには、次の行が含まれています。

153      memcpy(&pv[ply-1].path_hashed,&pv[ply].path_hashed,3);

スタティックの検証機能で次のメッセージが発行されます。

quiesce.c(153): エラー #12224: [SV] バッファー・オーバーフロー: オブジェクト "path_hashed" のサイズ (1 バイト) が、必要なサイズ (3 バイト) 未満です。

例 2: 組み込み関数の引数の型の誤り

makefile ファイルには次の行が含まれています。

31    CFLAGS2 = $(CFLAGS) -DVERSION=9 -DCOMPDATE=1994

version.c ファイルには、次の行が含まれています。

20 fprintf (stderr, "%s: version: %d, compiled: %s, cflags: %s\n",

21 ego, VERSION, COMPDATE, "CFLAGS");

スタティックの検証機能で次のメッセージが発行されます。

version.c(21): エラー #12037: [SV] "fprintf" の呼び出しで、実引数 5 は "char" へのポインターでなければなりません。