金庸筆下喬峰以「太祖長拳」橫掃少林群僧,證明基礎武功練至極致亦能所向披靡。C 語言同理:看似簡單,實則博大精深。Linux 核心、資料庫引擎、嵌入式韌體皆以 C 打造,透過大師之手化繁為簡。學習 C,重在看穿本質,而非死記語法。
| 標準 | 年份 | 關鍵新增 |
|---|---|---|
| K&R C | 1978 | 原始版本,無標準庫 |
| C89/C90 | 1989/1990 | 標準庫、函數原型、const/volatile/signed、寬字元 |
| C95 | 1995 | ISO 修訂、多位元組字元支援、wchar.h 等 |
| C99 | 1999 | 複數、long long、VLA、// 註解、stdint.h |
| C11 | 2011 | 多執行緒、_Generic、邊界檢查介面、原子操作 |
註:C++ 幾乎是 C 的超集;兩者公共子集稱為 Clean C。
以 gcc hello.c 為例:
-E):展開巨集、處理 #include、移除註解、保留 #pragma,產出 .i-S):詞法/語法/語義分析 + 最佳化,產出組合語言 .s-c):一對一翻譯成機器碼,產出目標檔 .oa.out靜態庫 (.a) 在連結期合入;動態庫 (.so) 僅記錄符號,載入期由動態連結器解析。下一篇將深入剖析靜/動態庫機制。
理解編譯流程,才能看懂「未定義符號」、「重複定義」、「標頭檔循環包含」等經典錯誤的本質。筆者同步更新於微信公眾號 DarkSir,歡迎關注交流。