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

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

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

例 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' へのポインターでなければなりません。