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

Turbo C 編譯、連結與執行常見錯誤全攻略(上)

     編輯:關於C語言

前言

Turbo C 2.0 作為經典 DOS 時代編譯器,其錯誤提示雖然簡潔,但對初學者往往難以理解。本文系統整理編譯期、連結期及執行期常見錯誤,並提供針對性解決方案,助你快速定位問題根源。

一、編譯期常見錯誤

1. 資料型別錯誤

  • 未宣告變數/常數:C 語言要求先宣告後使用,檢查所有識別字是否已定義。
  • 型別不匹配賦值:嚴格遵循「同型別賦值」原則,必要時使用強制轉型。
  • scanf 輸入型別錯誤:執行期導致未定義行為。建議在呼叫前印出提示訊息,引導使用者輸入正確格式。
  • 算術運算陷阱:
    • 浮點數字面值請寫 0.5 而非 .5,1.0 而非 1,養成良好習慣避免隱性轉換錯誤。
    • 除零錯誤:任何版本 C 語言除零皆導致程式崩潰,除法運算前務必檢查分母。
    • 確保 double 數值在實數表示範圍內,整數運算(含中間結果)不溢出 int 範圍。

2. 語法細節疏漏

  • 遺漏分號 ;:錯誤訊息 Statement missing ; in function <func>,檢查上一行結尾。
  • 巨集指令誤加分號:#include、#define 等預處理指令行尾不可加分號。
  • 括號不匹配:{}、()、/* */ 成對出現,IDE 會標示錯誤行。
  • 未 #include 標頭檔:導致函數參數未定義錯誤,補上對應 .h 檔。
  • 保留字作識別字:如 int、return 等不可作變數名。
  • 宣告置於執行語句之後:C89 標準要求區塊開頭集中宣告,調整順序即可。
  • 使用未定義變數:訊息 Undefined symbol '<var>' in function <func>。

3. 警告過多導致編譯中止

預設警告數超過 100 即停止編譯。可在 Options → Compiler → Errors 關閉警告檢查,或修正代碼消除警告(建議後者)。

4. 關係運算子誤用

== 與 = 混淆會產生 Lvalue required 錯誤,條件判斷務必使用 ==。

二、連結期常見錯誤

  • 未定義符號:函數僅宣告未定義、或庫檔未加入專案。檢查 .obj、.lib 是否正確連結。
  • 重複定義:全域變數/函數在多個檔案定義,使用 extern 或 static 限制作用域。
  • 堆疊溢位:遞迴過深或大型區域陣列,改用動態記憶體或增加堆疊大小。

三、執行期常見錯誤

  • 空指標解參考:NULL pointer assignment,檢查 malloc 回傳值、指標初始化。
  • 陣列越界:寫入超出配置範圍,導致記憶體損毀,善用邊界檢查或 assert。
  • 浮點數異常:除零、溢位、無效運算,啟用浮點數異常處理或預檢數值。
  • 檔案操作失敗:fopen 傳回 NULL 未檢查,路徑錯誤、權限不足、磁碟已滿。

總結速查表

階段典型徵兆首要排查方向
編譯Syntax error、Undefined symbol、Lvalue required語法細節、型別匹配、宣告順序
連結Undefined symbol、Duplicate symbol函數定義完整性、專案檔包含正確 .obj/.lib
執行Null pointer assignment、Stack overflow、Division by zero指標有效性、遞迴深度、除法分母檢查

掌握這些錯誤模式,除錯效率將大幅提升。下一篇將進一步探討 Turbo C 除錯技巧與優化建議。

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