for(i=1; i<=N; i++) { // 外層循環使用 i
// ...
for(i=2; i<j; i++) { // 內層循環同樣使用 i !
// ...
}
// 內層結束時 i 已被修改,外層判斷 i<=N 失效
}
C 語言 無塊級作用域(C99 前),for 循環初始化部分聲明的變量屬於外層函數作用域。內外層循環共用同一個 i,內層循環結束時 i 值為終止條件值(如 j),導致外層循環條件判斷錯誤,提前結束或陷入死循環。
i,內層 j/k/idx。
for (int i = 1; i <= N; i++) {
for (int j = 2; j < limit; j++) { /* j 僅在內層可見 */ }
}
-Wshadow (GCC/Clang) 可檢測變量遮蔽/重用風險。row/col、idx/innerIdx。