1969 年,貝爾實驗室退出 Multics 專案後,Ken Thompson 在一台僅 8K 字長 (18-bit) 的 DEC PDP-7 上,以組合語言編寫了 Unix 雛形。為追求更高開發效率,團隊嘗試引入高階語言,最終演化出 B → C 語言體系。
BCPL (Martin Richards, 1967)
↓ 無類型、單一字長資料模型
B (Ken Thompson, 1970)
↓ 引入字元類型、編譯器產生機器碼
C (Dennis Ritchie, 1971-73)
↓ 完整型別系統、結構體、指標/陣列統一語義
K&R C (1978) → ANSI C89 → C99 → C11 → C17
auto V[10])、引入 // 註解int *api[10], (*pai)[10]; 對應 *api[i]、(*pai)[i]&&、|| 短路邏輯運算子,分離邏輯與位運算#include、#define、條件編譯)unsigned、long、union、enum,結構體成第一類物件double sin(double);const、volatile、標準庫完善、預處理器規範化優點:簡統一、支援變長陣列模擬、字串以 \0 結尾無需長度欄位。
缺點:最佳化困難 (指標別名問題)、難以擴展為真正的多維陣列、sizeof 在參數傳遞中失效。
int *(*pfp)(); 讀法:pfp → 指標 → 函數 → 返回 → 指標 → int。雖符合「聲明模仿使用」原則,但嵌套複雜時極難閱讀。
external/internal 兩級可見性,無標準模組系統auto/static 兩種儲存期,動態記憶體全靠 malloc/free 手動管理