前言:為什麼選擇 C?
作者 Fabien Sanglard 以商業 3D 遊戲引擎開發經驗分享:選擇 C89 (ANSI C) 而非 C++,主因在於對工具的熟悉度、平台資源極限(iPhone 2G)下對效能的極致追求、以及 id Software 開源引擎代碼的啟發。核心觀點:**語言選擇的優劣,最終由「產品是否發布、運行是否足夠快」決定。**
避坑指南:劣質學習資源
- 網路教學、部落格、Google 搜尋結果:多不準確、淺薄,甚至有害。
- 「找答案越快,幹活越慢」——碎片化資訊造成效率假象。
- **沒有網站比一本好書更有價值,沒有好書比反組譯碼更有價值。**
三大必讀經典(循序漸進)
1. 入門聖經:《C 程式設計語言》 — K&R C
- 作者:C 語言之父 Kernighan & Ritchie。
- 僅 272 頁,簡潔明瞭,代碼範例極佳。
- 前幾週學習所需知識全在書中。
- **建議跳過** 附錄 A(晦澀細節)與附錄 B(標準庫)。
- 讓 C 語言顯得「嬌小、簡潔」,極適合快速上手。
2. 進階必讀:《C 專家編程》 — Peter van der Linden
- 以輕鬆幽默筆觸深入探討整型提升、指標/陣列退化、鏈接模型等「陰暗角落」。
- 穿插 NASA 等經典 Bug 案例,閱讀體驗極佳。
- 353 頁讓你意猶未盡,徹底打破「以為懂 C」的幻覺。
3. 案頭必備:《C 語言參考手冊》 — Samuel P. Harbison & Guy L. Steele Jr.
- 涵蓋 C89/C99 完整標準,權威、詳盡、冰冷。
- 不適合通讀,放在螢幕旁隨時查閱。
- 當你遇到 K&R 和專家編程解釋不了的細節,這裡有標準答案。
補充閱讀:讀代碼、養心態
id Software 開源引擎代碼庫
- Doom、Quake 系列、Wolfenstein 3D iPhone、Doom iPhone。
- 作者習慣撰寫備忘日誌,後整理為技術文章——**寫作是最好的深度學習方式**。
《Sh*t My Dad Says》
勞逸結合,保持健康心態同樣重要。
社群推薦補充書單
- C Interfaces and Implementations — David R. Hanson(可重用軟體設計)
- Object-Oriented Programming With ANSI-C — Axel-Tobias Schreiner(用 C 實現 OOP)
- Code Complete 2nd Edition — Steve McConnell(軟體構建百科全書)
給初學者的具體行動建議
- **手敲 K&R 所有範例**,不要複製貼上。
- 遇到詭異行為(如帶號整數比較、指標退化)先查專家編程,再查參考手冊。
- 閱讀 id Software 代碼時,專注於:記憶體管理、固定點數學、資源載入、平台抽象層。
- 定期用
gcc -S 或 objdump 看組合語言,理解高級構造的真實代價。
- 寫部落格/筆記,強迫自己用語言講清楚——費曼學習法。
「C 語言很小,但很深。掌握它不在於記住語法,而在於理解機器模型。」