C的偵錯
初寫:2005.02.24, 更新日期:2008.03.05
 
作者:曾聖超老師
 
有人說C語言最難學, 或最讓初學者具挫折感的地方, 就是偵錯,
在此, 提供各位同學一些簡單偵錯技巧.
但曾老師認為, 寫程式遇到錯誤時, 想辦法解決才是學習的開始。
大家必須要注意程式的錯誤訊息(Error Message),
因為錯誤訊息都是英文, 加上部分專業術語, 關鍵字或保留字等...
對於高中同學來說或許是一個門檻,
但是, 只要能夠抓出問題的所在, 不要用 " 猜 " 的。
反覆練習,必能日有所長!
  • 錯誤種類
    大致上,C出現錯誤的種類,
    不外乎兩種:語法錯誤(Syntax Error)和邏輯錯誤(Logical Error)
    大部分初學者容易有語法錯誤問題,
    然而當寫程式功力越來越高時,就容易有邏輯思維上的錯誤出現;
    而邏輯上的錯誤,也是比較難讓他人發現與除錯。
    在此,因為課程關係,我們先舉兩個語法錯誤的範例,
    讓大家瞭解錯誤的格式與訊息解讀.

  • 範例1:(使用FreeBSD4.10版gcc編譯)
    #include<stdio.h>
    void main( )
    {
       printf(" Hi I am david ! ");
    }

    編譯後,會出現什麼結果?
     myfirstc.c: In function `main':
     myfirstc.c:3: warning: return type of `main' is not `int'
    什麼意思?

  • 範例2:請輸入以下程式
    #include<stdio.h>
    main( )
    {
       int a=1
       printf(" a = %d \n",a);
    }

    程式出現
     test.c: In function `main':
     test.c:5: syntax error before `printf'
    請細心觀察,你認為程式錯在哪嗎?
    要如何更正?

  • [進階] 練習
    #include <stdio.h>
    main( )
    {
     char a;
     int b;
     short int c;
     long int d;
     unsigned int e;
     float f;
     double g;
     long double h;

     printf(" The char: %d Bytes\n",sizeof(a));
     printf(" The int: %d Bytes\n",sizeof(b));
     printf(" The short int: %d Bytesn\",sizeof(c));
     printf(" The long int: %d Bytes\n",sizeof(d));
     printf(" The unsigned int: %d Bytes\n",sizeof(e));
     printf(" The float: %d Bytes\n",sizeof(f));
     printf(" The double: %d Bytes\n",sizeof(g));
     printf(" The long double: %d Bytes\n",sizeof(h));
    }
    請找出上述程式的錯誤?

    二分逼近法介紹。
    邊寫邊編法。

  • 編譯轉換過程

    原始碼→前置處理器→擴充檔→詞彙分析器
    →符記化資料→語法剖析器→中間碼
    →最佳化程式→最佳化中間碼→程式產生器→
    組合語言→組譯程式→重置模組→可執行模組。



參考資料: