本教程以 K&R 經典教材《The C Programming Language, 2nd Edition》(Kernighan & Ritchie)為主軸, 並補充現代 C 標準(C99 / C11 / C17 / C23)、資料結構、系統程式設計、多執行緒與除錯工具等主題, 帶你從零基礎一路走到進階系統程式設計。
每個單元都包含:
README.md:完整的中文教學文件(觀念講解、範例、常見錯誤、練習題、K&R 對照章節)- 一個以上的
.c範例程式,程式碼中含有大量繁體中文註解 EXERCISES.md:5~8 題練習題與詳細解答(題目、解題思路、參考解答、程式碼講解、範例輸出)exercises/:每題的完整解答程式(可直接編譯執行)
環境準備
安裝編譯器
- macOS:安裝 Xcode Command Line Tools(內含 clang)
xcode-select --install
cc --version # 確認安裝成功
- Linux(Ubuntu/Debian):
sudo apt update && sudo apt install build-essential
gcc --version
- Windows:建議使用 WSL2 + Ubuntu,或安裝 MSYS2(mingw-w64 gcc)。
編譯與執行
# 基本編譯(建議永遠開啟警告)
cc -std=c11 -Wall -Wextra -o hello hello.c
# 執行
./hello
建議的編譯選項說明:
| 選項 | 說明 |
|---|---|
-std=c11 |
使用 C11 標準(本教程大多數範例的基準) |
-Wall -Wextra |
開啟常用警告,及早發現問題 |
-g |
加入除錯符號,供 gdb/lldb 使用 |
-O2 |
最佳化(效能測試時使用) |
-fsanitize=address |
AddressSanitizer,偵測記憶體錯誤 |
課程地圖
第一部:初階(01-beginner)— 打好地基
對應 K&R 第 1~3 章。目標:能獨立寫出含輸入/輸出、流程控制與函式的完整小程式。
| 單元 | 主題 | K&R 對照 |
|---|---|---|
| 01 | C 語言入門與開發環境 | §1.1 |
| 02 | 變數、資料型別與常數 | §1.2, §2.1–2.4 |
| 03 | 運算子與運算式 | §2.5–2.12 |
| 04 | 條件判斷:if / else / switch | §3.1–3.4 |
| 05 | 迴圈:while / for / do-while | §1.3, §3.5–3.8 |
| 06 | 函式與傳值呼叫 | §1.7–1.8, §4.1–4.2 |
| 07 | 陣列基礎 | §1.6 |
| 08 | 字元與字串入門 | §1.5, §1.9 |
| 09 | 標準輸入輸出 | §1.5, §7.1–7.4 |
第二部:中階(02-intermediate)— C 的核心威力
對應 K&R 第 4~7 章。目標:徹底掌握指標、記憶體、結構與檔案處理,這是 C 語言的靈魂。
| 單元 | 主題 | K&R 對照 |
|---|---|---|
| 01 | 指標基礎:位址與間接存取 | §5.1–5.2 |
| 02 | 指標與陣列、位址運算 | §5.3–5.5 |
| 03 | 多維陣列與指標陣列 | §5.6–5.9 |
| 04 | 進階字串處理 | §5.5, §B3 |
| 05 | 結構(struct) | §6.1–6.4 |
| 06 | union、enum、typedef 與位元欄位 | §6.7–6.9 |
| 07 | 動態記憶體配置 | §7.8.5, §B5 |
| 08 | 遞迴 | §4.10 |
| 09 | 作用域、儲存類別與多檔案專案 | §4.3–4.9 |
| 10 | 前置處理器與巨集 | §4.11 |
| 11 | 檔案輸入輸出 | §7.5–7.7 |
第三部:高階(03-advanced)— 邁向系統程式設計
對應 K&R 第 5.10–5.12、6.5–6.6、8 章,並大幅補充現代主題。
| 單元 | 主題 | 對照 / 來源 |
|---|---|---|
| 01 | 函式指標與回呼 | §5.11 |
| 02 | 解讀複雜宣告 | §5.12 |
| 03 | 命令列引數 | §5.10 |
| 04 | 位元運算技巧 | §2.9 + 延伸 |
| 05 | 可變參數函式 | §7.3 |
| 06 | 鏈結串列 | §6.5 + 延伸 |
| 07 | 堆疊與佇列 | 延伸主題 |
| 08 | 二元樹與二元搜尋樹 | §6.5–6.6 |
| 09 | 雜湊表 | §6.6 |
| 10 | UNIX 系統介面與低階 I/O | §8.1–8.6 |
| 11 | 自製記憶體配置器 | §8.7 |
| 12 | 現代 C:C99 / C11 / C17 / C23 | cppreference |
| 13 | 多執行緒程式設計(pthreads) | POSIX |
| 14 | 除錯、記憶體檢測與未定義行為 | gdb / sanitizers |
建議學習路線
- 完全新手:依序從初階 01 讀到 09,每個單元把範例親手打一遍、編譯、執行,再做
EXERCISES.md的練習題(先自己寫,卡住再看詳解)。 - 有其他語言經驗:快速掃過初階,重點放在中階的指標三部曲(01–03)與動態記憶體(07)。
- 想深入系統程式設計:完成中階後,高階的 10(UNIX 介面)、11(記憶體配置器)、13(多執行緒)是精華。
一鍵編譯驗證
倉庫根目錄提供 build_all.sh,會自動編譯所有範例並回報結果:
cd c-tutorial
./build_all.sh
參考資料
- Kernighan & Ritchie, The C Programming Language, 2nd Edition(本教程主要依據)
- cppreference.com — C 語言參考
- Modern C features(C99–C23 總覽)
- C23 標準(Wikipedia)
- Jens Gustedt, Modern C(進階讀者推薦)