在早期 DOS 環境下開發 C 程式時,建立自訂函數庫是提升開發效率、實現代碼復用的關鍵技能。本文詳細記錄使用 Turbo C 編譯器(TC)建立、管理與使用自訂函數庫的完整流程,涵蓋命令列工具與整合開發環境(IDE)兩種操作模式。
在 TC IDE 中建立 USERADD.C:
#define _NO_MAIN
int add(int *a, int *b) {
int c = (*a) + (*b);
return c;
}
按 Alt+F9 編譯,產生 USERADD.OBJ 目標檔案。
進入 DOS 環境(F10→F→O),將 OBJ 檔複製到 ..\LIB 目錄,執行:
TLIB USERLIB.LIB + USERADD.OBJ
即可生成 USERLIB.LIB,內含 add() 函數的二進制代碼。原始碼 USERADD.C 可備份後刪除。後續新增函數同樣編譯後用 TLIB 加入。
建立 USER1.H 並複製到 INCLUDE 目錄:
int add(int *, int *);
撰寫測試程式 ADD-1.C:
#include <stdio.h>
#include <user1.h>
void main() {
int a = 20, b = 30, c;
c = add(&a, &b);
printf("%d", c); // 輸出 50
}
命令列編譯連結:
TCC ADD-1.C ..\LIB\USERLIB.LIB
為了在 TC IDE 直接編譯連結,可將自訂函數直接加入 TC 的運行時庫:
TLIB CS.LIB + USERADD.OBJ
根據記憶體模式選擇對應運行時庫:
| 庫檔案 | 記憶體模式 |
|---|---|
| CS.LIB | 小模式 |
| CC.LIB | 緊湊模式 |
| CM.LIB | 中模式 |
| CL.LIB | 大模式 |
| CH.LIB | 巨模式 |
浮點運算需額外連結:EMU(模擬)或 FP87(80x87 協處理器)庫,以及 MATHx 數學庫(x 為 s/c/m/l/h)。
DOS 時代的函數庫管理雖顯繁瑣,但奠定了模組化開發的基礎概念:編譯→目標檔→庫管理→標頭檔宣告→連結使用。現代建構系統(CMake、Make、IDE 專案)本質上沿襲相同邏輯,理解此歷史流程有助於深入掌握現代工具鏈原理。