C89/C90 標準定義 32 個關鍵字 (C99 增加 5 個,C11 再增 7 個)。本文依功能分類逐一解析核心用法與陷阱。
| 關鍵字 | 用途 |
|---|---|
| char | 字元型 (1 byte) |
| short | 短整數 (通常 2 bytes) |
| int | 整數 (通常 4 bytes) |
| long | 長整數 (4/8 bytes) |
| float | 單精度浮點 (4 bytes) |
| double | 雙精度浮點 (8 bytes) |
| signed | 有號 (預設) |
| unsigned | 無號 |
| void | 無類型 / 無回傳 / 無參數 |
| struct | 結構體,支援封裝/繼承/多態雛形 |
| union | 共用體,成員共享記憶體,省空間 |
| enum | 列舉,增強可讀性,預設從 0 起序 |
union 範例:`union {int a; float b; char *c;} u;` 佔用 `max(sizeof(int), sizeof(float), sizeof(char*))` 位元組。寫入一成員後讀取另一成員為未定義行為 (型別懲罰)。
| 關鍵字 | 說明 |
|---|---|
| auto | 區域變數預設,極少顯式使用。 |
| register | 建議存入暫存器,不可取址 (`&`),編譯器可忽略。 |
| static | 三種語境: 1. 全域靜態:僅本編譯單元可見 (internal linkage) 2. 函數靜態:僅本檔可見 3. 區域靜態:靜態儲存區、保持值、僅初始化一次 |
| extern | 外部連結宣告,預設全域變數/函數即為 extern。 |
| 關鍵字 | 重點 |
|---|---|
| const | 唯讀變數,**定義時必須初始化**。指標修飾位置語意不同: `const int *p` / `int const *p` — 指向常數 `int *const p` — 常數指標 `const int *const p` — 雙重常數 |
| sizeof | 運算子 (非函數),編譯期計算類型/運算元大小 (bytes)。 與 `strlen` 差異:`sizeof` 為類型大小,`strlen` 為字串長度 (不含 `\0`),需以 `\0` 結尾。 |
| typedef | 類型別名,**不創建新類型** 。便於移植 (如 `typedef float real;` 統一改 `double`)、簡化複雜宣告 (函數指標)。 |
| volatile | 告知編譯器「值可能被外部不可見方式修改」,禁止優化 (快取/暫存器)。 適用:硬體暫存器、中斷服務常用變數、多執行緒共享旗標。 |
熟練掌握 32+ 關鍵字的語意、儲存類別、型別修飾、控制流與特殊屬性 (`const`/`volatile`/`restrict`),是寫出正確、高效、可移植 C 程式的基石。