| 年份 | 里程碑 |
|---|---|
| 1950s | ALGOL 60(A 語言)奠定現代程式語言基礎 |
| 1963 | CPL(Combined Programming Language)誕生 |
| 1967 | Martin Richards 簡化 CPL → BCPL |
| 1970 | Ken Thompson 基於 BCPL 設計 B 語言,編寫首版 Unix |
| 1972-73 | Dennis Ritchie 基於 B 語言設計 C 語言 |
| 1977 | Ritchie 發表《可移植的 C 語言編譯程序》 |
| 1978 | K&R 經典《The C Programming Language》出版("K&R C") |
| 1989 | ANSI X3.159-1989 發布(C89 / ANSI C) |
| 1990 | ISO/IEC 9899:1990(C90)國際標準化 |
| 1999 | ISO/IEC 9899:1999(C99)新增內聯、布爾、復數等 |
| 2011 | ISO/IEC 9899:2011(C11)新增泛型、原子操作、線程庫 |
優點:簡潔緊湊、運算符豐富、數據類型靈活、可直接操作硬件地址、目標代碼高效、移植性強、表達力強。
缺點:封裝性弱(無類/私有成員)、語法限制寬鬆(隱式轉換、數組越界不檢查)、對初學者門檻較高。
A. 基本類型(5):void、char、int、float、double
B. 類型修飾(4):short、long、signed、unsigned
C. 複雜類型(5):struct、union、enum、typedef、sizeof
D. 存儲類別(6):
auto:自動變量(棧上,默認)static:靜態存儲期、文件內部鏈接(修飾函數時)register:建議寄存器分配(現代編譯器多忽略)extern:外部鏈接聲明const:只讀語義(cv 特性之一)volatile:易變語義,阻止優化(cv 特性之二)E. C99 新增(3):_Bool(布爾)、_Complex(復數)、_Imaginary(純虛)
F. C11 新增(1):_Generic(泛型選擇)
G. C99 功能關鍵字(2):inline(內聯函數)、restrict(指針別名優化提示)
A. 跳轉(4):return、continue、break、goto
B. 分支(5):if、else、switch、case、default
C. 循環(3):for、do、while
for(init; cond; step) body:執行順序 init→cond→body→step→cond...do body while(cond):至少執行一次while(cond) body:前置判斷優先級由高到低,同組同級,空行分隔級別
() [] -> . // 後綴/結構成員,左結合
! ~ ++ -- - (type) * & sizeof // 一元運算,右結合
* / % // 乘除模,左結合
+ - // 加減,左結合
<< >> // 移位,左結合
< <= > >= // 關係,左結合
== != // 相等性,左結合
& // 位與,左結合
^ // 位異或,左結合
| // 位或,左結合
&& // 邏輯與,左結合
|| // 邏輯或,左結合
?: // 條件運算,右結合
= += -= *= /= %= <<= >>= &= ^= |= // 賦值,右結合
, // 逗號運算,左結合
sizeof 是運算符而非函數,參數可為類型或表達式(不求值)++i 與 i++ 的副作用順序點問題(C 標準未定義行為陷阱)&&、|| 具備短路求值特性?: 唯一三目運算符,右結合:a?b:c?d:e 等價 a?b:(c?d:e)