C 语言关键字是 C 语言本身预先定义好的、具有特殊含义的单词,它们是构成 C 语言语法的基石,你不能将它们用作变量名、函数名或其他任何自定义的标识符。

(图片来源网络,侵删)
C 语言有多少个关键字?
C 语言的关键字数量会根据标准的不同而略有变化。
- C89/C90 标准 (最经典、最常用): 32 个关键字
- C99 标准: 新增了 5 个关键字,总共 37 个
- C11 标准: 新增了 7 个关键字,总共 44 个
- C17 标准: 对 C11 进行了勘误,没有新增关键字,依然是 44 个。
在实际开发中,C89/C90 的 32 个关键字 是必须掌握的核心,而 C99 和 C11 的新增关键字则在特定场景下非常有用。
C89/C90 的 32 个核心关键字
这是最基础、最常用的部分,几乎所有 C 语言程序都会用到。
| 关键字 | 中文含义 | 主要用途和分类 |
|---|---|---|
| 数据类型 | ||
int |
整型 | 用于定义整型变量,如 int age = 25; |
char |
字符型 | 用于定义字符变量,如 char grade = 'A'; |
float |
单精度浮点型 | 用于定义单精度浮点数(小数),如 float price = 19.99; |
double |
双精度浮点型 | 用于定义双精度浮点数,精度更高,如 double pi = 3.1415926; |
void |
空类型 | 表示函数无返回值。 表示函数无参数。 表示通用指针,如 void *ptr; |
| 存储类型 | ||
auto |
自动变量 | 默认的存储类型,通常省略,变量在进入作用域时创建,离开时销毁。 |
static |
静态 | 修饰局部变量,使其生命周期延长至整个程序。 修饰全局变量,限制其作用域在当前文件内。 修饰函数,限制其作用域在当前文件内。 |
extern |
外部声明 | 声明一个变量或函数是在其他文件中定义的,用于跨文件访问。 |
register |
寄存器变量 | 建议编译器将变量存储在 CPU 寄存器中,以提高访问速度,现代编译器会自动优化,此关键字使用较少。 |
| 控制语句 | ||
if |
如果 | 条件判断语句,如 if (score > 60) { ... } |
else |
否则 | 与 if 配合使用,如 if (score > 60) { ... } else { ... } |
switch |
开关 | 多路分支选择语句。 |
case |
情况 | switch 语句中的分支标签。 |
default |
默认 | switch 语句中,所有 case 都不匹配时执行的分支。 |
for |
循环 | for 循环语句,如 for (int i = 0; i < 10; i++) { ... } |
while |
当...时 | while 循环语句,如 while (i < 10) { ... } |
do |
做 | do-while 循环语句,先执行一次循环体,再判断条件。 |
break |
中断 | 跳出 switch 语句。跳出当前循环( for, while, do-while)。 |
continue |
继续 | 结束本次循环,直接进入下一次循环的条件判断。 |
goto |
跳转 | 无条件跳转到程序中指定的标签。强烈不推荐使用,因为它会使代码结构混乱。 |
| 运算符相关 | ||
sizeof |
...的大小 | 一个运算符,用于返回一个变量或数据类型所占的字节数,如 int size = sizeof(int); |
| 复合数据类型 | ||
struct |
结构体 | 将不同类型的数据组合成一个整体,如 struct Student { ... }; |
union |
联合体 | 让不同的变量共享同一块内存空间。 |
enum |
枚举 | 定义一组命名的整数常量,如 enum Color { RED, GREEN, BLUE }; |
| 指针相关 | ||
typedef |
类型定义 | 为已有的数据类型创建一个新的别名,如 typedef int INTEGER; |
const |
常量 | 修饰一个变量为只读,其值在初始化后不能被修改,如 const int MAX = 100; |
C99 新增的 5 个关键字
C99 标准引入了许多新特性,这 5 个关键字是其重要组成部分。

(图片来源网络,侵删)
| 关键字 | 中文含义 | 主要用途和分类 |
|---|---|---|
inline |
内联 | 建议编译器将函数调用替换为函数体本身,以减少函数调用的开销,提高性能。 |
_Bool |
布尔型 | 引入了真正的布尔类型,其值为 true (1) 或 false (0),通常使用头文件 <stdbool.h> 中的 bool、true、false 宏。 |
_Complex |
复数 | 引入了复数数据类型,用于处理复数运算。 |
_Imaginary |
虚数 | 引入了虚数数据类型,用于处理虚数运算。 |
restrict |
限制 | 用于指针,告诉编译器该指针是访问某个数据对象的唯一方式,帮助编译器进行优化。 |
C11 新增的 7 个关键字
C11 标准主要增强了 C 语言对多线程和原子操作的支持。
| 关键字 | 中文含义 | 主要用途和分类 |
|---|---|---|
_Alignas |
对齐 | 用于指定变量或结构体的内存对齐方式,可以提高某些硬件平台的访问效率。 |
_Alignof |
对齐查询 | 一个运算符,用于查询类型或变量的对齐要求。 |
_Atomic |
原子 | 用于声明原子类型,确保在多线程环境下对变量的操作是原子的,不会被其他线程打断。 |
_Generic |
泛型 | 提供了一种基于参数类型选择不同函数的机制,类似于函数重载。 |
_Noreturn |
不返回 | 声明一个函数不会返回到其调用者,通常用于 exit() 或 abort() 这样的函数。 |
_Static_assert |
静态断言 | 在编译时进行断言检查,如果条件不满足,编译会失败并显示指定的错误信息。 |
_Thread_local |
线程局部存储 | 声明一个变量的存储期为线程的整个生命周期,每个线程都有自己独立的副本。 |
重要注意事项
- 区分大小写:C 语言的关键字都是小写的。
Int、IF、For都不是关键字,而是合法的标识符(不推荐这样写,容易混淆)。 - 不能作为标识符:这是最重要的规则,你不能用
int、char、for等作为变量名或函数名。// 错误示例 int int = 10; // 错误,'int' 是关键字 void for() { // 错误,'for' 是关键字 // ... } - 保留字:除了关键字,C 标准还保留了一些标识符(以下划线开头,后跟大写字母或另一个下划线)供标准库未来使用,虽然编译器可能不会报错,但强烈建议不要在你的代码中使用它们,
_EXIT_BOOL_ complex
| 标准 | 关键字数量 | 特点 |
|---|---|---|
| C89/C90 | 32 | 核心基础,必须牢固掌握。 |
| C99 | 37 | 引入了布尔类型、复合字面量、变长数组等,inline 是重要优化工具。 |
| C11 | 44 | 增强了多线程支持(_Thread_local)和原子操作(_Atomic),引入了静态断言(_Static_assert)。 |
对于初学者来说,请务必首先熟练掌握 C89/C90 的 32 个关键字,随着学习的深入,再逐步了解和使用 C99 和 C11 的新增关键字。
