C89 標準 32 個關鍵字分類總覽
| 分類 | 關鍵字 | 數量 |
| 數據類型 | char double enum float int long short signed struct union unsigned void | 12 |
| 控制語句 | if else switch case default for while do break continue goto return | 12 |
| 存儲類別 | auto register static extern | 4 |
| 其他 | const sizeof typedef volatile | 4 |
詳細語義與用法
一、數據類型關鍵字(12 個)
| 關鍵字 | 含義 | 典型用法 | 備註 |
int | 基本整型,通常 16/32 位 | int age = 25; | 至少 16 位,short ≤ int ≤ long |
short/short int | 短整型,至少 16 位 | short year = 2024; | 節省內存 |
long/long int | 長整型,至少 32 位 | long population = 8000000000L; | C99 新增 long long(≥64 位) |
signed | 有符號(默認) | signed int temp = -10; | 可省略,int 默認有符號 |
unsigned | 無符號,範圍 0~2ⁿ-1 | unsigned int flags = 0xFFFFFFFF; | 位操作、標誌位首選 |
char | 字符型,實際是小整數(1 字節) | char c = 'A'; | 是否有符號由實現定義 |
float | 單精度浮點(IEEE-754 binary32) | float pi = 3.14f; | 約 7 位十進制精度 |
double | 雙精度浮點(IEEE-754 binary64) | double e = 2.718281828; | 約 15-16 位精度,默認浮點類型 |
long double | 擴展精度(通常 80/128 位) | long double ld = 1.23456789012345L; | C99 標準化,精度最高 |
struct | 結構體,聚合異構數據 | struct Point {int x,y;}; | 成員順序固定,支持嵌套 |
union | 聯合體,共享內存區域 | union Data {int i; float f;}; | 同一時間只能存一個成員 |
enum | 枚舉,命名整型常量集合 | enum Color {RED, GREEN, BLUE}; | 底層是 int,可隱式轉換 |
void | 無類型/無返回值/通用指針 | void foo(void); void *p = malloc(10); | 不能聲明 void 變量 |
二、控制語句關鍵字(12 個)
| 關鍵字 | 作用 | 語法模式 |
if | 條件分支 | if (expr) stmt [else stmt] |
else | if 的備選分支 | 同上 |
switch | 多路選擇(整型表達式) | switch (expr) { case const: ... default: ... } |
case | switch 分支標簽 | case 1: ... |
default | switch 兜底分支 | default: ... |
for | 計數/通用循環 | for (init; cond; inc) stmt |
while | 先判斷後執行循環 | while (cond) stmt |
do | 先執行後判斷循環 | do stmt while (cond); |
break | 跳出最近循環或 switch | break; |
continue | 結束本輪循環,進入下一輪判斷 | continue; |
goto | 無條件跳轉到標號 | goto label; ... label: stmt; |
return | 函數返回,可帶表達式 | return expr; |
三、存儲類別關鍵字(4 個)
| 關鍵字 | 作用域/生存期/鏈接 | 典型場景 |
auto | 塊作用域、自動生存期、無鏈接(默認) | 局部變量,極少顯式寫 |
register | 建議寄存器分配,不可取地址 | 熱點循環計數器(現代編譯器自動優化) |
static | 靜態生存期(程序全期),文件/塊作用域,內部鏈接(文件級) | 模塊私有狀態、函數內保持值、單例模式 |
extern | 聲明外部鏈接實體(變量/函數),定義在別處 | 跨文件共享全局變量、頭文件聲明函數 |
四、其他關鍵字(4 個)
| 關鍵字 | 語義 | 核心用法 |
const | 只讀限定,編譯器可優化、放入只讀段 | const int MAX = 100; const int *p; int *const q; |
sizeof | 編譯期運算符,返回類型/表達式大小(字節),類型 size_t | sizeof(int)、sizeof arr、sizeof expr(不求值) |
typedef | 類型別名,不創建新類型 | typedef int Int32; typedef struct Node* List; |
volatile | 易變限定,禁止編譯器優化訪問,每次從內存讀寫 | 硬件寄存器映射、信號處理器共享變量、多線程標誌位 |
C99/C11 新增關鍵字(補充)
inline(C99):建議內聯展開
restrict(C99):指針無別名優化提示
_Bool、_Complex、_Imaginary(C99):布爾、複數類型
_Alignas、_Alignof、_Atomic、_Generic、_Noreturn、_Static_assert、_Thread_local(C11):對齊、原子、泛選、無返回、靜態斷言、線程局部存儲
速記口訣
類型十二:char double enum float int long
short signed struct union unsigned void
控制十二:if else switch case default for
while do break continue goto return
存儲四個:auto register static extern
其他四個:const sizeof typedef volatile
避坑提醒
- 關鍵字不能作標識符:變量、函數、標號、標籤名均不可用關鍵字。
sizeof 是運算符非函數:類型操作數需括號 sizeof(int),表達式可省略 sizeof x,不求值副作用。
const 與指針組合:const int *p(指向常量指針,數據不可改)、int *const p(常量指針,指針不可改)、const int *const p(雙重 const)。
volatile 不等於原子/線程安全:僅防編譯器優化,多線程同步需 _Atomic/鎖/內存屏障。
總結
32 個關鍵字構成 C 語言的骨架。建議:打印上表貼工位,**按分類理解語義、寫最小示例、對照汇编觀察編譯器行為**。掌握關鍵字組合語義(如 static inline、const volatile、extern "C"),是閱讀內核、庫源碼、編寫高質量 C 代碼的前提。