構文チェッカでは、例えば...

int a;
int n;
int table[4]={1,2,3,4};

for(n=0;n<4;n++)
{
  a=table[n];
  ...(略)
}

みたいなコードの「n<4」が「n<=4」となっていてもまず検出できない。
あとテーブルの数を増やすとループ回数と整合とれなくてバグったり。

単純な初期化処理のループなら、毎回すべての値が参照されるけど、例えば
テーブル参照してコマンドライン引数と照合するような処理の場合、仕様上は
未定義の引数を与えてテーブルの最後まで参照しないとバグが見つからない
とかある。 WindowsやLinuxみたいなメモリ保護のあるOS下であっても、要素
数を超える配列をアクセスしてもページ境界を超えなければ保護エラーには
ならない。

本来は「n<(sizeof((table)/sizeof(table[0]))」とか

#define LOOP_COUNT (sizeof((table)/sizeof(table[0]))と定義しておいて
「n<LOOP_COUNT」とか書くべき。 でもテストツールではこういう不適切な
コーディングは検出できない。