C 語言關鍵里程碑時間線
| 年份 | 里程碑 | 核心特性/影響 |
| 1972 | Dennis Ritchie 在貝爾實驗室開發 C | 為 UNIX 重寫提供系統級語言,B 語言演進而來 |
| 1978 | K&R C(《The C Programming Language》出版) | 事實標準,函數聲明無參數列表、無 `void`、`long float` 等 |
| 1989 | ANSI C (C89) | 首個國際標準,函數原型、標準庫、`void`、`const`、區域初始化 |
| 1990 | ISO C90 (ISO/IEC 9899:1990) | C89 國際化版本,內容一致 |
| 1999 | C99 (ISO/IEC 9899:1999) | 重大更新:`//` 註釋、混合聲明代碼、`stdint.h`、``、VLA、複數類型、內聯函數、複合字面量、指定初始化器、`restrict`、`long long`、`snprintf`、通用標識符 |
| 2011 | C11 (ISO/IEC 9899:2011) | 多線程 (``)、原子操作 (``)、泛型選擇 `_Generic`、對齊控制 (`alignas`/`alignof`)、`_Noreturn`、`_Static_assert`、匿名結構體/聯合、安全函數 (`_s` 後綴)、Unicode 支援 (`char16_t`/`char32_t`)、移除 `gets` |
| 2017/2018 | C17/C18 (ISO/IEC 9899:2018) | 無新特性,僅修正 C11 缺陷報告 |
| 2023/2024 | C23 (ISO/IEC 9899:2024) | 現代化大更新:`constexpr`、`auto` 推導、`typeof`、`[[attributes]]`、`#embed`、位精確整數類型、字面量後綴 `wb`/`ub`、`nullptr`、移除 K&R 風格函數定義、改進字符串字面量、標準化 `#pragma once` 等 |
GNU C vs ANSI/ISO C
| 維度 | GNU C (GCC/Clang 擴展) | 標準 C (ANSI/ISO) |
| 零長度數組 | `struct { int n; char data[0]; };` | C99 柔性數組成員 `char data[];` |
| 語句表達式 | `({ int x = f(); x * x; })` | 不支援 |
| 標籤值/跳轉 | `&&label; goto *ptr;` | 不支援 |
| 嵌套函數 | 函數內定義函數 | 不支援 |
| 屬性語法 | `__attribute__((...))` | C23 `[[...]]` 標準化 |
| 編譯器檢查 | `-std=c11 -pedantic-errors` 可禁用擴展 | 嚴格遵循標準 |
C99 核心新特性速查(現代 C 基線)
- `//` 單行註釋
- 混合聲明與代碼:`for (int i = 0; ...)`
- 固定寬度整數:`` → `int32_t`, `uint64_t` 等
- 布爾類型:`` → `bool`, `true`, `false`
- 內聯函數:`inline` 關鍵字
- 可變長度數組 (VLA):`int arr[n];`(C11 變為可選)
- 複合字面量:`(int[]){1,2,3}`
- 指定初始化器:`struct {int x;} s = {.x = 5};`
- `restrict` 關鍵字:指針不別名優化提示
- `long long` (至少 64 位)
- `snprintf`、`vsnprintf` 安全格式化
現代 C 開發建議(2024+)
- 基線標準:`-std=c11` 或 `-std=c17`(廣泛支援),條件編譯檢測 `__STDC_VERSION__`
2. 必開警告:`-Wall -Wextra -Wpedantic -Werror`(CI 強制)
3. 靜態分析:Clang Static Analyzer / Cppcheck / Coverity
4. 消毒器:`-fsanitize=address,undefined`(開發/測試階段)
5. 格式化:`clang-format` 統一風格
6. 測試框架:Unity / CMocka / Criterion
7. 構建系統:CMake / Meson 替代手寫 Makefile
8. 依賴管理:Conan / vcpkg / FetchContent
學習資源推薦
| 類型 | 推薦 |
|------|------|
| 入門經典 | 《C程序設計語言》(K&R) 第 2 版(ANSI C) |
| 現代實戰 | 《21世紀 C 語言》(Ben Klemens) |
| 專家進階 | 《C 專家編程》(Peter van der Linden) |
| 標準文檔 | ISO/IEC 9899:2018 (C17) 公開草案 |
| 參考手冊 | cppreference.com (C 章節) |
| 最佳實踐 | CERT C 編碼標準 / MISRA C (嵌入式) |
總結
C 語言從 1972 年誕生至今,經歷了 K&R → C89/C90 → C99 → C11 → C17 → C23 的標準化演進。C99 奠定了現代 C 基線,C11 引入並發與原子操作,C23 則大幅現代化語法與安全性。理解標準演進脈絡,配合編譯器版本支援矩陣(GCC/Clang/MSVC),是編寫可移植、可維護、高效能 C 代碼的前提。