C 語言自 1972 年誕生以來,經歷了從實驗性實現到國際標準化的半個世紀演進。每個標準版本都在保持向後兼容的前提下,引入關鍵特性回應時代需求。
| 階段 | 年份 | 標準/版本 | 核心貢獻 | 代表關鍵字新增 |
|---|---|---|---|---|
| 起源 | 1972-1978 | K&R C (《The C Programming Language》1st ed.) | 奠定語法基礎,Unix 系統實現語言 | 基礎 28 個 (auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while) |
| 標準化 | 1989/1990 | C89 / C90 (ANSI X3.159-1989 / ISO/IEC 9899:1990) | 首個國際標準,函數原型、標準庫規範 | 無新增 (奠定基線) |
| 修正增強 | 1995 | C95 (AMD1) | 多位元組字元、// 註釋 (借鑑 C++) | 無 |
| 現代化 | 1999 | C99 (ISO/IEC 9899:1999) | 革命性更新:VLA、// 註釋、inline、restrict、_Bool/_Complex/_Imaginary、long long、stdint.h/inttypes.h、指定初始化器、混合聲明代碼 | _Bool, _Complex, _Imaginary, inline, restrict, long long (6 個) |
| 穩健演進 | 2011 | C11 (ISO/IEC 9899:2011) | 多執行緒 (threads.h)、原子操作 (stdatomic.h)、泛型選擇 _Generic、靜態斷言 _Static_assert、邊界檢查介面 (Annex K)、alignas/alignof、_Noreturn、匿名結構/聯集 | _Alignas, _Alignof, _Atomic, _Generic, _Noreturn, _Static_assert, _Thread_local (7 個,以下劃線為保留標識符) |
| 安全與易用 | 2017/2018 | C17 / C18 (ISO/IEC 9899:2018) | 缺陷修正版,無新特性,鞏固 C11 | 無 |
| 現代標準 | 2023/2024 | C23 (ISO/IEC 9899:2024, 前稱 C2x) | typeof、auto 推導 (含 lambda 表達式)、nullptr、[[attributes]]、constexpr、二進制字面量、數字分隔符、#embed、#warning、stdckdint.h 等 | typeof, nullptr, constexpr, auto (新語義) 等 |
/* C11 基線 44 個 */ auto break case char const continue default do double else enum extern float for goto if inline int long register restrict return short signed sizeof static struct switch typedef union unsigned void volatile while _Bool _Complex _Imaginary _Alignas _Alignof _Atomic _Generic _Noreturn _Static_assert _Thread_local /* C23 新增/語義變更 */ typeof nullptr constexpr auto /* lambda 相關 */ alignas alignof static_assert thread_local /* 拼寫別名,無下劃線 */ /* 永久保留 (不可作標識符) */ _* /* 以下劃線開頭 + 大寫字母 */ __* /* 雙下劃線開頭 */
<stdio.h>, <stdlib.h>, <string.h>, <math.h> … (C89 核心庫)<stdint.h>, <inttypes.h>, <complex.h>, <fenv.h>, <tgmath.h> (C99 新增)<stdalign.h>, <stdatomic.h>, <stdnoreturn.h>, <threads.h>, <uchar.h> (C11 新增)<stdckdint.h>, <stdbit.h> (C23 新增)標準文檔 (如 N1570 C11 最終草案, N3220 C23 草案) 是:
restrict 別名規則、_Generic 類型泛化、原子操作內存序等高級特性的唯一權威源。-std=c11 -pedantic, Clang -Weverything, MSVC /std:c11 /permissive- 實時對標。C 語言以「極簡核心 + 豐富庫 + 廣泛硬體抽象」存活半個世紀。掌握其演進脈絡與關鍵字全集,不僅是考古,更是為了在現代工程中做出正確的語言特性選型決策——該用 _Generic 還是 _Atomic?該遷移 C23 還是鎖定 C11?標準文檔裡都有答案。