<think>
我们正在处理用户关于C语言保留词(关键字)的查询。根据引用[1],C语言中的保留字是预先定义的,具有特殊含义,不能用作变量名或函数名。用户希望获得完整的C语言保留词列表。
在C语言标准中,这些保留词称为“关键字”(keywords)。不同版本的C标准(如C89、C99、C11、C17)包含的关键字略有不同。我们将列出最常用的C语言关键字,并注明它们所属的标准版本。
注意:C语言的关键字都是小写的。以下列表基于C17标准(目前广泛支持的标准)整理:
1. **基本数据类型关键字**:
- `int`:声明整型变量或函数
- `char`:声明字符型变量或函数
- `float`:声明浮点型变量或函数
- `double`:声明双精度浮点型变量或函数
- `void`:声明无类型或空类型(函数无返回值,指针无类型等)
2. **类型修饰符关键字**:
- `short`:修饰整型,表示短整型
- `long`:修饰整型或双精度,表示长整型或长双精度
- `signed`:表示有符号类型(默认)
- `unsigned`:表示无符号类型
3. **复杂类型关键字**:
- `struct`:声明结构体
- `union`:声明联合体
- `enum`:声明枚举类型
4. **存储类别关键字**:
- `auto`:声明自动变量(局部变量,默认存储类别)
- `static`:声明静态变量(限定作用域或延长生命周期)
- `register`:建议编译器将变量存储在寄存器中
- `extern`:声明外部变量(用于跨文件引用)
5. **控制流关键字**:
- `if`:条件语句
- `else`:条件语句否定分支
- `switch`:开关语句
- `case`:开关语句分支
- `default`:开关语句其他分支
- `for`:循环语句
- `do`:循环语句的循环体
- `while`:循环语句的条件
- `break`:跳出当前循环或switch
- `continue`:结束当前循环的本次迭代,进入下一次
- `goto`:无条件跳转语句(一般不推荐使用)
6. **其他关键字**:
- `sizeof`:计算数据类型或变量的大小(返回`size_t`)
- `typedef`:为现有类型定义别名
- `volatile`:指示变量可能被意外修改(防止编译器优化)
- `const`:定义常量,表示变量值不可修改
- `return`:函数返回语句
7. **C99新增关键字**:
- `_Bool`:布尔类型(需要包含`stdbool.h`以使用`bool`别名)
- `_Complex`:复数类型(需要包含`complex.h`)
- `_Imaginary`:虚数类型(需要包含`complex.h`,但支持较少)
- `inline`:建议编译器内联函数
8. **C11新增关键字**:
- `_Alignas`:指定变量的对齐方式
- `_Alignof`:查询类型的对齐要求
- `_Atomic`:原子类型(需要包含`stdatomic.h`)
- `_Generic`:泛型选择(用于宏)
- `_Noreturn`:指定函数不会返回
- `_Static_assert`:编译时断言
- `_Thread_local`:线程局部存储
注意:C语言的关键字列表不包括预处理器指令(如`#include`, `#define`, `#ifdef`等),这些是预处理器的命令,不属于语言关键字。
完整列表(按字母顺序排列,共44个,包括C11新增的):
- `auto`, `break`, `case`, `char`, `const`, `continue`, `default`, `do`, `double`, `else`, `enum`, `extern`, `float`, `for`, `goto`, `if`, `inline` (C99), `int`, `long`, `register`, `return`, `short`, `signed`, `sizeof`, `static`, `struct`, `switch`, `typedef`, `union`, `unsigned`, `void`, `volatile`, `while`
- C99新增:`_Bool`, `_Complex`, `_Imaginary`, `restrict`(注意:`restrict`用于指针,表示指针是访问数据的唯一方式,以优化性能)
- C11新增:`_Alignas`, `_Alignof`, `_Atomic`, `_Generic`, `_Noreturn`, `_Static_assert`, `_Thread_local`
注意:`restrict`是C99引入的关键字,但在C11中仍然是关键字。
所以,最常用的32个关键字(C89标准)加上后续新增的关键字,总共约44个(具体数量根据标准版本有所不同)。实际编程中,我们通常使用C89/C99的关键字为主。
用户在使用时,应避免将这些关键字用作标识符(变量名、函数名等)。例如,以下代码是错误的:
```c
int char; // 错误:char是关键字,不能用作变量名
```
参考引用[1]中关于保留字和关键字的区别:在C语言中,关键字就是保留字,两者通常可以互换使用。因为C语言的所有关键字都被保留,不能用于其他目的。
希望这个列表对您有帮助!
§§相关问题§§
1. C语言的关键字在不同标准中有哪些差异?
2. 如何避免在编程中误用C语言关键字?
3. C语言的关键字与C++的关键字有哪些不同?
</think>
以下是C语言保留词(关键字)的完整列表及分类说明。保留词是C语言中具有特殊功能的预定义标识符,不能用作变量名或函数名[^1]。
### C语言保留词大全(按功能分类)
#### **1. 数据类型关键字**
- 基本类型:
`char`, `int`, `float`, `double`, `void`
- 类型限定:
`short`, `long`, `signed`, `unsigned`
- 复合类型:
`struct`, `union`, `enum`
#### **2. 存储类别关键字**
`auto`, `extern`, `register`, `static`
#### **3. 控制流关键字**
- 条件分支:
`if`, `else`, `switch`, `case`, `default`
- 循环:
`for`, `do`, `while`
- 跳转:
`break`, `continue`, `return`, `goto`
#### **4. 运算符相关关键字**
`sizeof`(计算对象大小)
`const`(定义常量)
#### **5. 编译器指令关键字**
`typedef`(类型别名定义)
`volatile`(防止编译器优化)
#### **6. C99新增关键字**
`_Bool`, `_Complex`, `_Imaginary`, `inline`, `restrict`
#### **7. C11新增关键字**
`_Alignas`, `_Alignof`, `_Atomic`, `_Generic`, `_Noreturn`, `_Static_assert`, `_Thread_local`
### 完整字母序列表(共44个)
```plaintext
auto break case char const continue default do
double else enum extern float for goto if
inline int long register return short signed sizeof
static struct switch typedef union unsigned void volatile
while _Alignas _Alignof _Atomic _Bool _Complex _Generic _Imaginary
_Noreturn _Static_assert _Thread_local restrict
```
### 关键说明
1. **保留词不可复用**
例如:`int char;` 是非法的,因为`char`是保留词[^1]。
2. **大小写敏感**
所有保留词均为小写,`Int`或`CHAR`不是保留词。
3. **版本差异**
- C89标准:32个保留词
- C99新增:5个(如`restrict`)
- C11新增:7个(如`_Atomic`)[^1]
4. **文件操作相关函数非保留词**
如`fopen`[^3]、`fgets`[^4]是库函数,不属于语言保留词。
---