C 程式的開發流程 (以命令列方式解釋)

TURBO C IDE

在以 Turbo C IDE (整合式發展環境,Integrated development envinonment) 開發程式時 edit, compile, link 完畢後在 output 目錄裡你會看到 xxx.obj xxx.exe 兩個檔案 (如果你的程式叫做 xxx.c 的話) 這兩個檔案各是在哪一個步驟產生的呢? 其內容為何? TURBO C IDE 環境的方便性隱藏了不少的細節, 這些對於專業的資訊人員來講卻都是需要知道的知識。

發展一個程式的步驟

發展一個程式的步驟如下圖:

Turbo C / Borland C IDE 環境裡很容易讓你誤以為程式寫好就可以執行了, 其實中間有許多步驟。

命令列編譯器與連結器

以下我們利用 Turbo C/C++ 的命令列編譯器 tcc.exe (或是 Borland C/C++ 的命令列編譯器 bcc.exe) 實作二個範例程式來說明編譯連結執行的過程:

範例一:

列印函式 f(x) = 3x^3 - 7.5x^2 + x - 2 自 x=-5 至 x=5 每隔 0.1 的函式值

test1.c

  1. 步驟一:請利用筆記本 (或是 Turbo C 編輯器) 編輯 test1.c 程式, 將上列程式拷貝進來,並存檔於適當目錄中。

  2. 步驟二:在 MSDOS 模式視窗裡利用 cd , dir 等指令找到 test1.c 程式 (例如: C:\user\yourname\cprog\ 目錄中)

  3. 步驟三:在 MSDOS 模式視窗裡鍵入 bcc /c test1.c (或是 在 Turbo C 環境中 tcc /c test.c) 來編譯此程式, 此時編譯器會檢查程式語法, 分析程式究竟要做些什麼, 並且產生程式對應的機器指令碼, 置於 test.obj 檔案內。

    注意

  4. 步驟四: 在 MSDOS 模式視窗內鍵入 bcc test1.obj 來連結此程式, 產生 test1.exe 執行檔案, 不要看此命令只有給一個參數 test1.obj 以為單由 test.obj 可以產生 test1.exe , 錯了! 還有許多函式庫, 在 BORLAND C 中還有像 CS.LIB, MATHS.LIB 等等存放在 c:\language\bc301\lib 目錄內的函式庫, 這些函式庫包含了像 scanf(), printf() 這類 C 的標準函式。

    注意

  5. 步驟五: 載入及執行, 直接在 MSDOS 模式視窗內鍵入

    即可將執行程式由磁碟機載入記憶體中並且開始執行。

範例二:

上一個例子是把程式放在單一檔案中,讓我們嘗試一個多檔案的 C 程式, 我們刻意將前一個範例拆開到兩個檔案中如下:

  1. 步驟一:請使用筆記本 (或是 Turbo C 編輯器) 編輯 test2a.c 及 test2b.c 程式, 並存檔於適當之目錄中。

  2. 步驟二:個別編譯 test2a.c 及 test2b.c

    會產生 test2a.obj 及 test2b.obj

  3. 步驟三:連結 test2a.obj, test2b.obj 及其它系統函式庫

    會產生 test2a.exe

  4. 步驟四:載入及執行,請鍵入

    即可。

注意: 設計 C/C++ 程式時為什麼要分為好幾個檔案呢?

  1. 檔案為 C 程式中基本的模組單位, 程式設計者可以把目的、性質接近的 C 程式碼放在同一個檔案中, 使得性質不同的程式碼不會互相干擾, 需要的話兩個不同檔案的 C 程式碼中甚至可以使用相同的變數名稱及函式名稱 (需要加上 static 宣告)。

  2. 一個大的 C 程式可以有幾十萬列程式, 若是你只放在一個 C 程式檔中, 一旦你修改某一列程式後, 你需要重新編譯全部程式碼, 這需要很多時間, 雖然你知道大部分的時間是完全浪費的, 但是 complier 不知道你到底在哪裡做了修改, 只好全部編譯一遍, 若是你自己分為許多個小檔案, 例如此範例中若只修改 test2b.c 則只需編譯 test2b.c, test2a.c 不需要再編譯, 只需要做連結的動作就好了。

  3. Turbo C IDE 環境中也可以用所謂的專業檔 (project) 來處理多個檔案的 C 程式, 步驟請參考如何製作 Turbo C IDE 環境下的專案

注意

程式設計課程 首頁

製作日期: 98/11/14 by 丁培毅 (Pei-yih Ting)
E-mail: pyting@cs.ntou.edu.tw