第一章 綜述
1.1 起源
1972 年貝爾實驗室開發 C 語言,面向程序員,為編寫系統軟件而生。
1.2 使用理由
- 通往 C++ 的必經之路。
- 融合控制特性的現代語言。
- 高效、可移植、強大、靈活;面向程序員需求,允許訪問硬件、操縱內存位,擁有豐富運算符。
缺點:自由度高易出錯,需程序員自律。
1.3 發展方向
- C++ 在 C 基礎上添加面向對象特性,近似超集關係。
- 嵌入式系統編程領域 C 語言地位穩固且流行度上升。
1.4 計算機工作基本原理
- CPU:中央處理單元,執行絕大多數計算。
- RAM:隨機訪問存儲器,運行時程序與數據工作區。
- 永久存儲:硬盤等,斷電保持數據。
- 外設:人機交互接口。
CPU 工作流程:取指令 → 執行 → 取下一條指令…
核心:一切信息本質是數字;程序最終為機器碼指令集。
1.5 高級語言與編譯器
編譯器將高級語言翻譯為機器指令。高級語言以更抽象方式描述動作。
1.6 使用 C 語言的七個步驟
- 定義目標:清晰知道程序做什麼。
- 設計程序:偽碼描述邏輯,確定界面、數據結構。
- 編寫代碼:
.c 源文件。
- 編譯:源碼 → 目標碼(.obj/.o),加入庫代碼,檢查錯誤。
- 運行:執行可執行文件。
- 測試調試:發現修復邏輯錯誤。
- 維護修改:迭代優化。
1.7 編程機制:編譯與鏈接
- 源碼
.c → 編譯器 → 目標碼 .obj (機器碼,缺啟動代碼/庫函數)。
- 鏈接器 將目標碼 + 啟動代碼(程序入口/OS接口) + 庫文件(標準函數實現) 合併 → 可執行文件
.exe/a.out。
- 分離編譯鏈接利於模塊化開發。
Unix 下運行 C 程序
vi test.c # 編寫
cc test.c # 編譯鏈接生成 a.out
ls # 查看
./a.out # 運行 (需 ./ 指定當前目錄)
mv a.out myprog # 重命名保存,否則下次編譯覆蓋
Windows IDE 技巧
控制台程序運行閃退,可在 main() 末尾加 getchar(); 暫停。
1.8 語言標準演進
- 1978:K&R C (經典 C)
- 1989/1990:C89/C90 (ANSI C)
- 1999:C99
- 2011:C11
Chapter 1 OVER!