本教程以 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

建議學習路線

  1. 完全新手:依序從初階 01 讀到 09,每個單元把範例親手打一遍、編譯、執行,再做 EXERCISES.md 的練習題(先自己寫,卡住再看詳解)。
  2. 有其他語言經驗:快速掃過初階,重點放在中階的指標三部曲(01–03)與動態記憶體(07)。
  3. 想深入系統程式設計:完成中階後,高階的 10(UNIX 介面)、11(記憶體配置器)、13(多執行緒)是精華。

一鍵編譯驗證

倉庫根目錄提供 build_all.sh,會自動編譯所有範例並回報結果:

cd c-tutorial
./build_all.sh

參考資料