首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C++ 程式設計常見錯誤大全:語法、邏輯、執行時錯誤分類與 7 大類 37 項具體錯誤清單

     編輯:關於C語言

參考《C++ Primer》錯誤分類,系統整理 C++ 程式設計中三大錯誤類型與七大類別 37 項具體錯誤現象,助開發者建立錯誤預防檢查清單。

一、程式錯誤三大分類

類型定義發現階段
語法錯誤違反 C++ 語法規則(結構、拼寫)編譯期
邏輯錯誤演算法/程式碼與解題原意不符測試/執行期
執行錯誤運行環境導致(除零、記憶體不足、檔案不存在)執行期

二、七大類 37 項具體錯誤清單

1. 變數相關 (11 項)

  1. 忘記定義變數
  2. 變數命名不當(關鍵字、保留字、易混淆名稱)
  3. 資料類型不一致(隱式轉換精度遺失、有號/無號混用)
  4. 字元常數 'a' 與字串常數 "a" 混用
  5. 輸入輸出格式符與變數類型不符(%d 對 float)
  6. 忽略 int 數值範圍導致溢位
  7. 輸入資料格式不符規格(空白、換行、分隔符)
  8. 忽略大小寫敏感(var vs Var)
  9. 陣列定義時誤以「元素個數」為「最大下標」
  10. 多維陣列定義/引用次序錯誤(a[row][col])
  11. 誤以為陣列名代表全體元素(實為首元素位址)

2. 運算子相關 (4 項)

  1. 比較 == 與賦值 = 混淆
  2. 自增 ++/自減 -- 副作用順序不當(未定義行為)
  3. 誤用 = 當作「等於」判斷
  4. scanf 忘記 & 取址

3. 標點符號相關 (5 項)

  1. 陳述句漏分號
  2. 不該加分號處加了(if (cond); { ... })
  3. 複合陳述句漏大括號
  4. 括號不配對(圓/方/大括號)
  5. 陣列索引誤用圓括號 a(i)

4. 指標相關 (4 項)

  1. 混淆字元陣列 char str[] 與字元指標 char *p
  2. 使用未初始化指標(野指標)
  3. 不同類型指標強制轉換/混用
  4. 混淆陣列名(常量指標)與指標變數(可修改)

5. 陳述句相關 (3 項)

  1. switch 分支漏 break 導致貫穿
  2. 字元 'a' 與字串 "a" 表示混淆
  3. 缺少 #include 導致隱式宣告警告/錯誤

6. 函數相關 (5 項)

  1. 函數定義在調用之後且無前向宣告
  2. 函數宣告與定義不匹配(參數、回傳類型、cv-limits)
  3. 誤以為形參修改影響實參(傳值 vs 傳址/參考)
  4. 實參形參類型不一致(隱式轉換風險)
  5. 忽略函數參數求值順序未定義(C++17 前)

7. 其他錯誤 (5 項)

  1. 混淆結構體類型與變數(對類型賦值)
  2. 檔案操作未 fopen 或模式不符(r vs w、二進制/文字)
  3. 除零錯誤(整數/浮點數)
  4. 陣列/緩衝區越界存取
  5. 動態記憶體洩漏(new 無 delete、malloc 無 free)

三、錯誤預防黃金法則

  1. 編譯器警告視為錯誤:-Wall -Wextra -Werror (GCC/Clang) / /W4 /WX (MSVC)。
  2. 靜態分析工具:Cppcheck、Clang-Tidy、SonarQube、PVS-Studio。
  3. 單元測試覆蓋:GoogleTest、Catch2、Boost.Test,針對邊界、異常路徑。
  4. Code Review 機制:強制雙人審查,關注邏輯錯誤與資源管理。
  5. 現代 C++ 風格:優先用 std::vector/string/span 替代裸陣列/指標,用 RAII 管理資源,用 auto 減少類型錯誤。

總結

「試圖一次寫出完美程式幾乎不可能。」—— 豐富經驗源於無數次踩坑與修正。建立系統性錯誤知識庫,配合工具鏈與工程規範,才能將錯誤率壓至最低。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved