首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言發展史:從 BCPL 到 ANSI C 的演進全記錄

     編輯:關於C

緣起:貝爾實驗室與 Unix 的誕生

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

關鍵演進里程碑

1. BCPL → B:簡化與適配

  • 移除巢狀函數、valof 表達式、全域向量機制
  • 採單通編譯、簡化聲明語法 (auto V[10])、引入 // 註解
  • PDP-7 上採用 threaded code 解釋執行,效能受限

2. B → NB → C:型別系統的建立

  • 關鍵突破:陣列名在表達式中自動轉換為指向首元素的指標,解決結構體內含陣列的指標隱藏與初始化難題
  • 聲明語法模仿表達式:int *api[10], (*pai)[10]; 對應 *api[i]、(*pai)[i]
  • 引入 &&、|| 短路邏輯運算子,分離邏輯與位運算
  • 增加預處理器 (#include、#define、條件編譯)

3. 可移植性驅動的成熟期 (1973-1980)

  • 1973 年 Unix 核心以 C 重寫 (PDP-11)
  • 編譯器移植至 Honeywell 635、IBM 360/370
  • Steve Johnson 開發可移植編譯器 PCC,推動 Unix 移植至 Interdata 8/32、VAX
  • 引入 unsigned、long、union、enum,結構體成第一類物件
  • Lint 工具誕生,補足編譯器型別檢查不足

4. 標準化時期 (1983-1989)

  • ANSI X3J11 委員會成立,1989 年發布 C89 (ISO/IEC 9899:1990)
  • 唯一重大語法變更:函數原型引入參數型別 double sin(double);
  • 新增 const、volatile、標準庫完善、預處理器規範化

設計哲學與爭議特性

陣列與指標的統一語義

優點:簡統一、支援變長陣列模擬、字串以 \0 結尾無需長度欄位。

缺點:最佳化困難 (指標別名問題)、難以擴展為真正的多維陣列、sizeof 在參數傳遞中失效。

聲明語法「由內而外」

int *(*pfp)(); 讀法:pfp → 指標 → 函數 → 返回 → 指標 → int。雖符合「聲明模仿使用」原則,但嵌套複雜時極難閱讀。

缺乏模組化與記憶體管理

  • 僅 external/internal 兩級可見性,無標準模組系統
  • 僅 auto/static 兩種儲存期,動態記憶體全靠 malloc/free 手動管理
  • 無垃圾回收、無例外處理

為何 C 語言極度成功?

  1. Unix 成功帶動:數十萬開發者接觸
  2. 簡單小巧:編譯器易實作,貼近機器又具抽象層
  3. 工具屬性務實:為寫實用程式而生,非學術驗證
  4. 極佳穩定性:核心語言數十年幾無破壞性變更
  5. 可移植性意外大成:從微控制器到超級電腦通吃

主要參考文獻

  • Dennis Ritchie, The Development of the C Language, HOPL-II, 1993
  • Kernighan & Ritchie, The C Programming Language, 1978/1988
  • ANSI X3.159-1989 / ISO/IEC 9899:1990
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved