「C 語言不難,難在堅持;指標不複雜,複雜在記憶體模型;程式不會寫,不會在動手。」
目標:能寫出正確執行的結構化程式,理解基本資料型態與流程控制。
推薦資源:《C Primer Plus》(第 6 版)第 1-10 章、B 站「鄭鋼 C 語言」/「小甲魚 C 語言」、LeetCode Easy 陣列/字串專項 30 題
目標:徹底理解指標本質,熟練動態記憶體操作,避開常見陷阱。
必讀經典:《C 專家編程》(指標章節)、《C 缺陷與陷阱》、CSAPP 第 1-3 章(資料表示、機器級程式碼)
實戰練習:手寫 strlen/strcpy/strcmp/qsort、實作動態陣列/鏈結串列/堆疊/佇列
目標:掌握核心資料結構 C 實作,具備演算法分析與優化能力。
推薦教材:《資料結構與演算法分析:C 語言描述》(Weiss)、《演算法圖解》、LeetCode 中等/困難題專項刷題
目標:理解計算機系統底層運作,具備開發高效、穩健、可維護系統軟體能力。
聖經級教材:《UNIX 環境高級程式設計》(APUE)、《Linux 核心設計與實作》、《Computer Systems: A Programmer's Perspective》(CSAPP)、《TCP/IP 詳解 卷 1》
| 原則 | 具體行動 | 效果 |
|---|---|---|
| 每日編碼 | 每天最少 1 小時純手寫代碼,不複製貼上 | 建立肌肉記憶、語法內化 |
| 單步除錯 | 每寫完一個函式,用 GDB 單步執行觀察變數/記憶體/堆疊 | 深度理解執行流程、早期發現邏輯錯誤 |
| 閱讀源碼 | 每週精讀一個開源專案核心模組(Redis/SQLite/Nginx/Linux Kernel) | 學習優秀架構、命名慣例、錯誤處理模式 |
| 寫技術筆記 | 記錄踩坑經驗、優化心得、面試題解析,建立個人知識庫 | 知識沉澱、複習高效、輸出倒逼輸入 |
| Code Review | 參與開源專案 PR、團隊互審、請大牛指導自己的代碼 | 發現盲區、學習最佳實踐、提升代碼品味 |
-Wall -Wextra -Werror,零警告通過if (scanf("%d", &x) != 1) 處理錯誤輸入snprintf/strncpy、預留 \0 空間int *p = NULL;if (!(p = malloc(n))) { perror("malloc"); exit(1); }free(p); p = NULL; 防野指標strlen 不含 \0,配置需 +1fabs(a - b) < EPS| 類別 | 工具/平台 | 用途 |
|---|---|---|
| 編譯器 | GCC、Clang、MSVC | 標準合規、優化能力、跨平台 |
| IDE/編輯器 | VS Code + C/C++、CLion、Vim/Neovim + LSP | 智能提示、除錯整合、重構支援 |
| 建置工具 | CMake、Make、Meson | 專案配置、交叉編譯、套件管理 |
| 除錯器 | GDB、LLDB、WinDbg、Visual Studio Debugger | 斷點、觀察點、核心傾印分析 |
| 靜態分析 | Cppcheck、Clang Static Analyzer、Coverity | 編譯期發現潛在 Bug |
| 動態分析 | Valgrind、AddressSanitizer、ThreadSanitizer | 執行期檢測記憶體/執行緒錯誤 |
| 線上評測 | LeetCode、Codeforces、AtCoder、Luogu、PAT | 演算法練習、面試準備、競賽訓練 |
| 文檔參考 | cppreference.com、man pages、GNU C Library Manual | 權威標準庫參考、離線可用 |
「學 C 語言就是學計算機怎麼運作。當你能在腦中模擬 CPU 執行每條指令、記憶體每個位元組的變化時,你就真正掌握了它。」