前言
作為現代計算機科學基石之一,C 語言歷經半個世紀仍活躍於系統核心、嵌入式、高效能計算等領域。本章從歷史脈絡、語言特性、主流版本、C/C++ 關係、源程序結構規範、書寫風格、字符集與詞法六大維度,為初學者建立完整的 C 語言宏觀認知框架。
一、C 語言發展脈絡
| 年份 | 里程碑 |
| 1970 年代初 | 貝爾實驗室開發,服務 UNIX 系統 |
| 1978 | K&R 著《The C Programming Language》,確立「K&R C」事實標準 |
| 1983 | ANSI X3J11 委員會發布 ANSI C (C89),統一語言規範 |
| 1989/1990 | ISO/IEC 9899:1990 (C90) 國際標準化 |
| 1999/2011/2018 | C99、C11、C18 持續演進 |
二、C 語言核心特點
- 結構化:模組化組織、層次清晰、易調試維護。
- 表達力強:豐富運算符、多樣數據類型、支援複雜數據結構。
- 底層訪問:直接操作物理記憶體地址、位級運算,融合高級與低級語言優勢。
- 雙重適用:既可開發作業系統、驅動等系統軟體,亦適合應用層開發。
- 高效能、強移植:編譯生成機器碼,極小運行時開銷;標準庫抽象平台差異,廣泛移植於大中小微各類架構。
三、主流編譯器版本(DOS/Windows 早期視角)
- Microsoft C (MSC):微軟官方,後演變為 Visual C++。
- Borland Turbo C:編譯極快、IDE 友善、教學首選。
- AT&T C:商業 UNIX 發布版本基準。
上述版本均在 ANSI C 基礎上各自擴展(如圖形庫、擴展關鍵字),增強實用性。
四、C 與 C++:繼承與超越
- 1983 年 Bjarne Stroustrup 在 C 礎上推出 C++,引入類、繼承、多態、模板等**面向對象**機制。
- 主流 C++ 編譯器:Borland C++ 4.5、Symantec C++ 6.1、Microsoft Visual C++ 2.0 (時代背景)。
- 關鍵認知:C 是 C++ 子集(近似),語法高度兼容。**先精通 C,再學 C++ 可事半功倍**,以熟悉語法降低 OOP 認知負荷。
五、C 源程序結構特點與規範
1. 結構組成要素
/* 預處理指令 */
#include <stdio.h>
#include <math.h>
/* 全域聲明/定義 */
int max(int a, int b); // 函數聲明
/* 主函數 - 唯一入口 */
main() {
/* 變量聲明部分 */
double x, s;
/* 執行語句部分 */
printf("input number:\n");
scanf("%lf", &x);
s = sin(x);
printf("sine of %lf is %lf\n", x, s);
}
/* 用戶自定義函數 */
int max(int a, int b) {
if (a > b) return a;
else return b;
}
2. 必遵守的六大結構規則
- 程序可由多源文件組成,每文件含一或多函數。
- 整個程序**有且僅有一個**
main 函數。
- 預處理命令(
#include、#define 等)通常置於文件最前端。
- 每個聲明、語句必以分號結束;但預處理命令、函數首部、右大括號
} 後**不加**分號。
- 標識符、關鍵字間至少一空格隔開;若有明顯界符(如
( ; ,)可省略空格。
- 註釋以
/* */ 包裹,可跨行,編譯器忽略。
3. 書寫風格建議(養成良好習慣)
- 一聲明/一語句佔一行。
{ } 獨佔一行,與所屬結構首字符對齊。
- 內層語句相對外層縮進(建議 4 空格),增強可讀性。
六、C 語言字符集
| 類別 | 內容 | 備註 |
| 字母 | A~Z, a~z (52個) | 區分大小寫 |
| 數字 | 0~9 (10個) | |
| 空白符 | 空格、制表符 \t、換行符 \n | 僅在字符/字符串常量中屬內容;其他場合僅作分隔,編譯器忽略 |
| 標點/特殊符號 | ~ ! @ # $ % ^ & * ( ) - _ = + [ ] { } | \ ; : ' " , . < > / ? | 構成運算符、分隔符等 |
字符常量、字符串常量、註釋中可包含漢字或其他可顯示圖形符號。
七、C 語言詞法六大類
- 標識符:變量/函數/標號名稱。規則:字母/數字/下劃線組成,**首字符必為字母或下劃線**。區分大小寫。長度受編譯器限制(早期常取前 8 位有效)。命名應見名知意。
- 關鍵字 (保留字):語言賦予特定含義,不可作標識符。分類:
① 類型說明符 (int, double...)
② 語句定義符 (if, else, switch...)
③ 預處理命令字 (include, define...)
- 運算符:1~多字符,與運算元構成表達式。豐富程度遠超同期語言。
- 分隔符:逗號
,(參數/聲明分隔)、空格(詞法分隔)。
- 常量:數值、字符、字符串、符號常量、轉義字符等(詳見第二章)。
- 註釋符:
/* ... */,可現於程序任何位置,亦可暫時屏蔽代碼段。
八、格式化輸入輸出初探 scanf/printf
兩函數參數表結構:**格式控制串** + **參數表**。
- 格式串雙引號括起,含格式字符(如
%d、%lf)與普通字符(原樣輸出)。
- 參數表對應格式字符順序給出變量地址(
scanf)或值(printf),逗號分隔。
- 範例:
printf("sine of %lf is %lf\n", x, s); 兩個 %lf 分別對應 x、s。
九、用戶自定義函數調用機制
int max(int a, int b); // 聲明
main() {
int x, y, z;
scanf("%d%d", &x, &y);
z = max(x, y); // 調用:實參傳值給形參
printf("max=%d", z);
}
int max(int a, int b) { // 定義
if (a > b) return a;
else return b;
}
- 函數間為**並列關係**,
main 可調用其他函數。
- 自定義函數需在調用前**聲明**(或定義前置),告知編譯器返回類型與參數。
- 調用時發生**值傳遞**:實參值複製給形參,函數內修改不影響實參。
return 將計算結果傳回調用處。
總結
本章建立了 C 語言的歷史定位、語言特性、版本演進、與 C++ 關係、源程序骨架規範、詞法分類、基本 I/O 格式、函數調用模型等核心認知地圖。後續章節將逐層深入:數據類型與運算符 → 控制流程 → 函數 → 陣列 → 指針 → 結構/聯合/枚舉 → 文件操作 → 預處理,構建完整知識體系。
- 上一篇文章: Turbo C 程序調試實戰指南:消息窗口、錯誤追蹤與熱鍵操作
- 下一篇文章: Turbo C 程序設計入門(四):從建立源文件到生成 EXE 完整流程實戰
Copyright ©
程式碼之家 All Rights Reserved