首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言循環變量重用導致外層循環失效的經典陷阱

     編輯:程式設計綜合問答

錯誤代碼片段


for(i=1; i<=N; i++) {          // 外層循環使用 i
    // ...
    for(i=2; i<j; i++) {      // 內層循環同樣使用 i !
        // ...
    }
    // 內層結束時 i 已被修改,外層判斷 i<=N 失效
}

根因分析

C 語言 無塊級作用域(C99 前),for 循環初始化部分聲明的變量屬於外層函數作用域。內外層循環共用同一個 i,內層循環結束時 i 值為終止條件值(如 j),導致外層循環條件判斷錯誤,提前結束或陷入死循環。

修正方案

  1. 使用不同變量名:外層 i,內層 j/k/idx。
  2. C99 標準:在 for 初始化處聲明變量(現代編譯器默認支持):
    
        for (int i = 1; i <= N; i++) {
            for (int j = 2; j < limit; j++) { /* j 僅在內層可見 */ }
        }
        
  3. 啟用編譯器警告:-Wshadow (GCC/Clang) 可檢測變量遮蔽/重用風險。

良好習慣

  • 循環變量命名語義化:row/col、idx/innerIdx。
  • 嵌套超過 3 層時,考慮提取函數降低認知負荷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved