スタティックの検証では、コンパイラーは各プログラムユニットを個別に解析し、ユーザープログラムのあらゆる種類のエラー、警告、または問題点をチェックします。次に例を示します。
オブジェクトの誤った使用や変更
メモリーの問題 (例: リーク、破壊、初期化されていないメモリー)
ポインターの誤った使用
境界違反
組み込み関数の呼び出しにおける引数値の誤り
不要コードと冗長な実行
以下は、ローカルプログラム解析の例です。
例 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' へのポインターでなければなりません。