1.1 什麼是 C 語言?
C 是一門**通用、過程式、靜態類型、編譯型**的計算機編程語言。設計目標:
- 簡易編譯,單次通過即可生成機器碼。
- 直接操作底層內存(指針算術),適合系統編程。
- 生成極精簡機器碼,無運行時依賴,可裸機運行。
- 提供高級語言抽象(結構體、函數、模塊化),平衡效率與可維護性。
強類型語言代表:C, C++, Java, C#, Go, Rust。
弱/動態類型代表:Python, JavaScript, Lua, Ruby, PHP。
1.2 為什麼 2024 年仍首推 C 入門?
- 計算機科學基石:作業系統、編譯器、數據庫、嵌入式固件、網絡協議棧、高性能庫(OpenSSL, FFmpeg, LevelDB...)核心均為 C/C++。
- 語法祖先:C++, Java, C#, Go, Rust, Swift, JS, PHP 核心語法(花括號、分號、類型聲明、控制流)直接繼承自 C。學會 C,學其他語言只需關注「差異」。
- 無隱藏成本:每行代碼對應的機器指令清晰可預測,培養「機器思維」。
- 就業面廣:嵌入式、底層驅動、高性能後端、遊戲引擎、安全研究、編譯器開發。
**結論**:除非確定只做 Web 前端/數據分析/腳本自動化,否則 **C 是最佳入門語言,無爭議。**
1.3 C 語言誕生與演進史話
| 年份 | 里程碑 |
| 1967 | Martin Richards 簡化 CPL → **BCPL** |
| 1969~1970 | Ken Thompson 在 PDP-7 上為玩《Space Travel》開發 **Unix v1**,發明 **B 語言**(BCPL 子集) |
| 1971 | Dennis Ritchie 加入,改進 B 語言 |
| 1972 | **C 語言誕生**(取 BCPL 第二字母),PDP-11 上重寫 Unix 內核 |
| 1973 | Unix 幾乎全 C 重寫,展現**極致可移植性** |
| 1978 | K&R《The C Programming Language》出版,成 facto 標準 |
| 1989 | ANSI C (C89/C90) 標準化 |
| 1999 | C99:內聯、變長數組、`//` 註釋、``、``、`restrict` |
| 2011 | C11:多線程 ``、原子操作 ``、泛型選擇 `_Generic`、安全函數 Annex K |
| 2018 | C18:修正缺陷,無新特性 |
| 2024 | C23 (進行中):`nullptr`、`auto` 推導、`constexpr`、模塊、屬性語法 `[[...]]`... |
1.4 學習路線圖建議
- **基礎語法**:變量、類型、運算符、控制流、函數、數組、指針、字符串、結構體、文件 I/O、預處理器。
- **內存模型**:棧/堆/數據段/代碼段、指針算術、動態分配、內存對齊、未定義行為 (UB) 避坑。
- **工程工具**:GCC/Clang 編譯鏈接、Make/CMake、GDB 調試、Valgrind/ASan 內存檢查、靜態分析。
- **系統接口**:文件描述符、進程/線程/信號、管道/Socket、同步原語、虛擬內存/mmapping。
- **實戰專題**:實現動態數組/哈希表/線程池/簡易 Shell/HTTP Server/記憶體分配器。
下一章:編寫第一個程序與核心術語。