教學目標
- 了解 C 語言發展歷程與在計算機科學中的地位
- 掌握 C 語言核心特點與適用場景
- 熟練搭建開發環境(編輯器+編譯器/IDE)並完成首個程式編譯執行
課程內容架構
1. 程式語言演進脈絡
低級語言:貼近硬體,犧牲可移植性
- 機器語言:0/1 指令,極難編寫維護
- 組合語言:助憶符號,強綁定 CPU 指令集(如 A 類 CPU 128K 快取 vs B 類 1K,導致程式無法跨平台)
高級語言:接近人類邏輯,具備跨平台潛力
- 編譯型(C、C++、Fortran):一次編譯生成機器碼,執行快、跨平台需重新編譯
- 解釋型(Python、JavaScript、早期 BASIC):邊解譯邊執行,啟動快、跨平台強、執行較慢
- 混合型(Java、C#):編譯為位元組碼,再由虛擬機 JIT 編譯執行
2. C 語言誕生與 UNIX 共榮共生
- Ken Thompson & Dennis Ritchie(雙圖靈獎得主)為移植 UNIX 發明 C 語言
- C 語言賦予 UNIX 可移植性 → UNIX 成為主流作業系統(BSD、Solaris、macOS、Linux 皆源自 UNIX 血統)
- C 語言衍生出 C++、Objective-C、Java、Python 解釋器核心等現代語言生態
3. C 標準演進
| 標準 | 年份 | 關鍵特性 |
| K&R C | 1978 | 非官方事實標準 |
| C89 / ANSI C | 1989 | 首個國際標準,函數原型、void、const |
| C99 | 1999 | // 註解、stdint.h、bool、VLA、restrict |
| C11 | 2011 | 多執行緒 <threads.h>、原子操作、泛型選擇 _Generic |
| C17 / C18 | 2018 | 修正缺陷,無新增功能 |
| C23 | 2024 | nullptr、constexpr、#embed、typeof 等現代化特性 |
注意:編譯器對新標準支援程度不同,GCC、Clang、MSVC 需查閱對應版本文檔。
4. C 語言十大核心特點
- 語法精簡、關鍵字少(僅 32 個保留字)
- 運算符豐富(位運算、指針運算、三元運算符等)
- 資料結構完備(陣列、結構體、聯合體、指針構建鏈表/樹/圖)
- 結構化控制流(
if/else、switch、for/while/do-while)
- 高度可移植(遵循標準的程式僅需重新編譯)
- 語法限制寬鬆(隱式轉換、指針算術、無邊界檢查)
- 直接操作硬體(記憶體映射 I/O、位欄、內嵌組語)
- 執行效率極高,接近組合語言
- 開發週期相對較長(手動記憶體管理、無內建高階抽象)
- 彈性過大易出錯(野指針、緩衝區溢出、未定義行為陷阱)
5. 開發工具鏈選型指南
初學者推薦:文本編輯器 + 命令列編譯器
- 編輯器:VS Code(含 C/C++ 擴充)、Notepad++、Sublime Text —— 必開啟語法高亮、括號匹配、自動縮排
- 編譯器:GCC(MinGW-w64 / Linux 原生)、Clang、MSVC(Visual Studio Build Tools)
- 優勢:強迫理解編譯鏈接流程、錯誤訊息直觀、無魔法自動完成干擾學習
進階開發者:輕量級 IDE
- Code::Blocks:內建 GCC、跨平台、無過度自動化,適合教學與中小專案
- CLion / VS Code + CMake Tools:專業級,支援 CMake、單元測試、靜態分析、遠端開發
原則:只有在「不靠 IDE 也能完成開發」時,才引入 IDE 提升效率;否則會掩蓋對建構系統、鏈接器、除錯器的理解。
6. Code::Blocks 實戰流程(Hello World)
- 啟動 → 「建立新專案」→ 「Console application」→ 選 C 語言
- 設定專案路徑與檔名(副檔名
.c)
- 編輯器輸入程式碼
- Ctrl+F9 編譯 → 修正錯誤/警告至零
- Ctrl+F10 執行觀察輸出
7. C 程式基本骨架
#include <stdio.h> // 預處理指令:引入標準輸入輸出庫
int main(void) // 程式入口,返回 int 給作業系統
{
int x, y, sum; // 區域變數定義
scanf("%d%d", &x, &y); // 格式化輸入
sum = x + y; // 算術運算
printf("%d\n", sum); // 格式化輸出
return 0; // 正常結束
}
8. 程式設計學習閉環
預習復習 → 課堂專注 → 抄碼(建立肌肉記憶) → 改碼(驗證理解) → 閱讀優秀代碼 → 規範格式 → 獨立寫簡單程式 → 挑戰複雜問題 → 積極交流提問
延伸閱讀建議
- The C Programming Language (K&R2) —— 經典入門聖經
- C Primer Plus (6th+) —— 詳盡標準庫覆蓋
- Expert C Programming —— 深入編譯器與記憶體模型
- C 標準草案(N3220 / N2731)—— 釐清未定義/實現定義行為