Turbo C 2.0 作為經典 DOS 時代編譯器,其錯誤提示雖然簡潔,但對初學者往往難以理解。本文系統整理編譯期、連結期及執行期常見錯誤,並提供針對性解決方案,助你快速定位問題根源。
scanf 輸入型別錯誤:執行期導致未定義行為。建議在呼叫前印出提示訊息,引導使用者輸入正確格式。0.5 而非 .5,1.0 而非 1,養成良好習慣避免隱性轉換錯誤。double 數值在實數表示範圍內,整數運算(含中間結果)不溢出 int 範圍。;:錯誤訊息 Statement missing ; in function <func>,檢查上一行結尾。#include、#define 等預處理指令行尾不可加分號。{}、()、/* */ 成對出現,IDE 會標示錯誤行。#include 標頭檔:導致函數參數未定義錯誤,補上對應 .h 檔。int、return 等不可作變數名。Undefined symbol '<var>' in function <func>。預設警告數超過 100 即停止編譯。可在 Options → Compiler → Errors 關閉警告檢查,或修正代碼消除警告(建議後者)。
== 與 = 混淆會產生 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 除錯技巧與優化建議。