首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言啟蒙:從 Unix 起源到編譯鏈路全景解析

     編輯:關於C語言

序言:C 是「太祖長拳」,基礎亦是巔峰

金庸筆下喬峰以「太祖長拳」橫掃少林群僧,證明基礎武功練至極致亦能所向披靡。C 語言同理:看似簡單,實則博大精深。Linux 核心、資料庫引擎、嵌入式韌體皆以 C 打造,透過大師之手化繁為簡。學習 C,重在看穿本質,而非死記語法。

C 與 Unix:雙生共生的傳奇

  • 1969 年 Ken Thompson 用組合語言寫 Unix,移植極難
  • 1972 年 Dennis Ritchie 設計 C,隔年用 C 重寫 Unix,奠基可移植作業系統時代
  • Ritchie 2011 年辭世,Thompson 高壽,但 Unix 與 C 精神在 Linux、GNU、BSD 社群生生不息

C 標準演進時間軸

標準年份關鍵新增
K&R C1978原始版本,無標準庫
C89/C901989/1990標準庫、函數原型、const/volatile/signed、寬字元
C951995ISO 修訂、多位元組字元支援、wchar.h 等
C991999複數、long long、VLA、// 註解、stdint.h
C112011多執行緒、_Generic、邊界檢查介面、原子操作

註:C++ 幾乎是 C 的超集;兩者公共子集稱為 Clean C。

編譯四部曲:預處理 → 編譯 → 組譯 → 連結

以 gcc hello.c 為例:

  1. 預處理 (-E):展開巨集、處理 #include、移除註解、保留 #pragma,產出 .i
  2. 編譯 (-S):詞法/語法/語義分析 + 最佳化,產出組合語言 .s
  3. 組譯 (-c):一對一翻譯成機器碼,產出目標檔 .o
  4. 連結:解析符號、合併區段、生成可執行檔 a.out

靜態庫 (.a) 在連結期合入;動態庫 (.so) 僅記錄符號,載入期由動態連結器解析。下一篇將深入剖析靜/動態庫機制。

結語

理解編譯流程,才能看懂「未定義符號」、「重複定義」、「標頭檔循環包含」等經典錯誤的本質。筆者同步更新於微信公眾號 DarkSir,歡迎關注交流。

C 編譯流程圖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved