C語言關鍵字完整分類解析:C89/C99/C11 標準全覆蓋
關鍵字是編譯器保留、具有特殊語義的標識符,不可作變數/函數名。本文按語義分類梳理 C89(32個)、C99(+5個)、C11(+7個)標準關鍵字,附帶中文說明與典型用法,方便速查與教學。
一、資料類型關鍵字(12 + 3)
| 關鍵字 | 標準 | 說明 | 範例 |
| void | C89 | 無類型/無返回值/無參數 | void foo(void); void* p; |
| char | C89 | 字元型(1 byte) | char c = 'a'; |
| short | C89 | 短整型(≥16位) | short s = 32767; |
| int | C89 | 整型(≥16位,通常32位) | int i = 42; |
| long | C89 | 長整型(≥32位) | long l = 1L; |
| float | C89 | 單精度浮點(≥6有效位) | float f = 3.14f; |
| double | C89 | 雙精度浮點(≥10有效位) | double d = 3.14; |
| signed | C89 | 有符號修飾(預設) | signed char sc; |
| unsigned | C89 | 無符號修飾 | unsigned int ui = 42u; |
| _Bool | C99 | 布林型(0/1) | _Bool flag = 1; |
| _Complex | C99 | 複數型 | _Complex double z = 1.0+2.0*I; |
| _Imaginary | C99 | 虛數型 | _Imaginary float y = 1.0*I; |
| _Decimal32/64/128 | C11 | 十進制浮點(選擇性支援) | _Decimal64 price = 19.99dd; |
二、類型構造關鍵字(4)
| 關鍵字 | 說明 | 範例 |
| struct | 結構體,聚合異構資料 | struct Pt {int x,y;}; |
| union | 共用體,同一記憶體多解釋 | union U {int i; float f;}; |
| enum | 枚舉,命名整數常量集 | enum Color {RED, GREEN}; |
| typedef | 類型別名,非新類型 | typedef int Int32; |
三、儲存類別與鏈接屬性(5)
| 關鍵字 | 說明 | 備註 |
| auto | 自動儲存期(區域變數預設),極少顯式用 | C89 |
| register | 建議存入寄存器,不可取址 | C89,現代編譯器自動優化 |
| static | 靜態儲存期/內部鏈接/類內共享 | C89,多義詞,語境決定義 |
| extern | 外部鏈接聲明,跨檔案共享 | C89 |
| _Thread_local | 執行緒區域儲存期 | C11 |
四、類型限定詞(4 + 1)
| 關鍵字 | 說明 | 標準 |
| const | 唯讀,編譯期常量傳播優化 | C89 |
| volatile | 易變,禁止優化,硬體暫存器/訊號處理必備 | C89 |
| restrict | 指針無別名,允許積極優化(C99 針對指針) | C99 |
| _Atomic | 原子型別限定詞(C11 原子操作基礎) | C11 |
| inline | 建議內聯展開(函數限定詞) | C99 |
五、控制流關鍵字(12)
| 分類 | 關鍵字 | 說明 |
| 選擇 | if / else | 條件分支 |
| switch / case / default | 多路分支,default 為兜底 |
| 迴圈 | for / while / do | 三種迴圈形式 |
| break | 跳出最內層迴圈/switch |
| continue | 結束本輪迴圈,進入下一輪 |
| goto | 無條件跳轉(慎用) |
| 跳轉/返回 | return | 函數返回,可帶運算式 |
| _Noreturn | 函數不返回(abort/exit/長跳轉) |
六、其他特殊關鍵字(3 + 2)
| 關鍵字 | 標準 | 說明 |
| sizeof | C89 | 編譯期/執行期求類型/運算式大小(位元組) |
| _Alignas | C11 | 指定對齊需求(位元組) |
| _Alignof | C11 | 查詢類型/運算式對齊要求 |
| _Generic | C11 | 編譯期類型泛型選擇,模擬重載 |
| _Static_assert | C11 | 編譯期斷言,失敗報錯 |
版本演進速查表
| 標準 | 新增關鍵字 | 總數 |
| C89/C90 | 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 | 32 |
| C99 | _Bool _Complex _Imaginary inline restrict | 37 |
| C11 | _Alignas _Alignof _Atomic _Generic _Noreturn _Static_assert _Thread_local | 44 |
常見誤區澄清
sizeof 是運算子而非函數,引數為類型時需括號:sizeof(int);為運算式時可省略:sizeof x
const int* p 指向常量整數的指針(不可經 p 修改),int* const p 是常量指針(p 自身不可修改)
volatile 不等同於執行緒安全,多執行緒同步需用 _Atomic 或鎖
restrict 僅對指針有效,違反承諾導致未定義行為
熟記關鍵字分類與語義,能助你閱讀標準文檔、編寫符合規範的代碼、避開命名衝突陷阱。