C 語言誕生於貝爾實驗室,伴隨 UNIX 成長,經歷 K&R 事實標準 → ANSI C 國際標準 → C99/C11 現代化演進。本文梳理關鍵時間線、版本特性、編譯器支援現狀及對後續語言的深遠影響。
| 年份 | 里程碑 |
|---|---|
| 1969-1973 | 貝爾實驗室研發 C,1972 年為關鍵年 (Ritchie) |
| 1973 | UNIX 核心以 C 重寫,確立系統編程語言地位 |
| 1978 | K&R 出版《The C Programming Language》,事實標準 |
| 1983 | ANSI 成立 X3J11 委員會制定標準 |
| 1989 | ANSI X3.159-1989 發布 (ANSI C / C89) |
| 1990 | ISO/IEC 9899:1990 (C90) 國際標準,內容同 C89 |
| 1999 | ISO/IEC 9899:1999 (C99) 發布,重大功能增強 |
| 2011 | ISO/IEC 9899:2011 (C11) 發布,多執行緒、原子操作、泛型選擇 |
| 2018 | ISO/IEC 9899:2018 (C17/C18) 修正版,無新特性 |
| 2024 | C23 (C2x) 標準化中,預期 modules、nullptr、constexpr 等 |
| 特性 | K&R C (C78) | ANSI C (C89/C90) | C99 / C11 |
|---|---|---|---|
| 函數原型 | 無 (隱式聲明) | 有 (強制檢查參數) | 增強 (可變參、內聯) |
| 標準庫 | 極簡 | 完整規範 (stdio/stdlib/string/math...) | 大幅擴展 (complex、tgmath、threads、atomic...) |
| 預處理器 | 基礎 | 標準化 (#、##、defined) | 增強 (_Pragma、可變參宏) |
| 類型系統 | 基本 | const、volatile、signed/unsigned 明確 | stdint.h 定寬、_Bool、_Complex、_Generic |
| 編譯器支援 | 歷史 | 幾乎所有編譯器完美支援 | GCC/Clang/MSVC (C99 部分、C11 大部) 支援不一 |
| 編譯器 | C89 | C99 | C11 | C23 |
|---|---|---|---|---|
| GCC | ✅ | ✅ 幾乎全 | ✅ 大部 | 🚧 實驗性 |
| Clang | ✅ | ✅ 幾乎全 | ✅ 大部 | 🚧 實驗性 |
| MSVC | ✅ | ⚠️ 部分 (C99 核心庫缺失) | ⚠️ 部分 | 🚧 |
建議:跨平台專案鎖定 C99 核心子集,條件編譯處理 MSVC 缺口;純 Linux/嵌入式可激進用 C11。
| 語言 | 繼承自 C 的核心基因 |
|---|---|
| C++ | 語法、類型、預處理、標準庫子集、鏈接模型 |
| Java | 語法風格、基本類型、控制流、包機制靈感 |
| C# | 語法、類型系統雛形、運行時互操作 |
| PHP | 語法 (C 風格)、標準庫函數命名、擴展開發用 C |
| JavaScript | 語法 (花括號、分號、控制流)、部分運算符 |
| Go/Rust/Swift | 語法簡化版、編譯模型、FFI 介面 |