C语言中的关键字详细梳理
C语言中的关键字是C语言编译器预定义的、具有特殊意义的标识符。这些关键字不能用作变量名、函数名或其他标识符。下面是C99标准中定义的所有关键字及其定义与作用:
-
auto
:自动变量存储类别说明符。用于声明自动变量,即在函数内部声明的局部变量,如果不显式指定存储类别,则默认为auto
。不过,在C语言中,auto
关键字几乎从不使用,因为局部变量默认就是自动的。 -
break
:用于跳出最近的循环(for
、while
、do-while
)或switch
语句。 -
case
:switch
语句的一部分,用于定义多个分支。 -
char
:数据类型,用于声明字符变量或数组。字符在C语言中是以整数形式存储的,但char
类型用于表示字符。 -
const
:常量修饰符,用于声明一个常量。被const
修饰的变量其值在初始化后不能被修改。 -
continue
:用于跳过当前循环的剩余部分,直接进入下一次循环迭代(在for
、while
、do-while
循环中)。 -
default
:switch
语句的一部分,当没有任何case
匹配时执行。 -
do
:do-while
循环的开始。do-while
循环至少执行一次,因为条件测试是在循环体执行之后进行的。 -
double
:数据类型,用于声明双精度浮点数变量或数组。 -
else
:if
语句的一部分,当if
条件不满足时执行else
后面的代码块。 -
enum
:枚举类型声明。枚举是一种用户定义的类型,它包含一组命名的整数值。 -
extern
:用于声明一个变量或函数是在别的文件中定义的,或者是在当前文件的后面定义的。 -
float
:数据类型,用于声明单精度浮点数变量或数组。 -
for
:循环控制语句,用于重复执行一段代码固定次数或直到某个条件不再满足。 -
goto
:无条件跳转语句,用于跳转到程序中的另一个标签位置。虽然goto
在某些情况下很有用,但通常不推荐使用,因为它会使程序流程变得难以理解和维护。 -
if
:条件语句,用于根据条件表达式的真假来执行不同的代码块。 -
int
:数据类型,用于声明整数变量或数组。 -
long
:数据类型,用于声明长整数变量或数组。在某些平台上,long
类型可能比int
类型占用更多的存储空间。 -
register
:建议编译器将变量存储在CPU的寄存器中以提高访问速度。然而,这个建议对现代编译器来说往往是多余的,因为编译器比程序员更了解如何优化代码。 -
restrict
:C99标准新增的关键字,用于告知编译器两个指针不会指向同一个内存位置,这有助于编译器进行更好的优化。 -
return
:用于从函数返回值。如果函数有返回类型(非void
),则必须有一个return
语句来返回该类型的值。 -
short
:数据类型,用于声明短整数变量或数组。与int
相比,short
类型通常占用更少的存储空间。 -
signed
:用于声明有符号整数类型(如signed int
),但通常省略,因为int
默认就是有符号的。 -
sizeof
:运算符,用于获取变量或数据类型所占用的字节数。 -
static
:静态变量存储类别说明符或函数修饰符。用于声明静态变量或函数,静态变量在程序的整个执行期间只被初始化一次,并且其值在函数调用之间保持不变。静态函数只能在其被声明的文件内部被调用。 -
struct
:结构体类型声明。结构体是一种复合数据类型,可以包含多个不同类型的成员。 -
switch
:多路分支选择语句,用于基于不同的条件执行不同的代码块。 -
typedef
:类型定义关键字,用于为现有的数据类型定义一个新的名字(别名)。 -
union
:联合体类型声明。联合体是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型,但一次只能存储其中一种类型的数据。 -
unsigned
:用于声明无符号整数类型(如unsigned int
),无符号整数不能表示负数,但可以表示更大的正数。 -
void
:表示“无类型”。用于声明不返回值的函数,或作为函数的参数类型,表示该函数不接受任何参数。 -
volatile
:告诉编译器该变量的值可能会在程序的控制之外被改变(例如,被中断服务程序或操作系统改变)。这防止了编译器对该变量的优化(如缓存其值)。 -
while
:循环控制语句,用于在给定条件为真时重复执行一段代码。 -
_Bool
(C99新增)、_Complex
(C99新增)、_Imaginary
(C99新增):这些是C99标准引入的类型关键字,但在实际编程中较少直接使用,因为它们通常通过<stdbool.h>
、<complex.h>
等头文件提供的类型别名来访问(如bool
、complex
)。 -
_Alignas
(C11新增)、_Alignof
(C11新增)、_Atomic
(C11新增)、_Generic
(C11新增)、_Noreturn
(C11新增)、_Static_assert
(C11新增)、_Thread_local
(C11新增):这些是C11标准引入的关键字或特性,用于支持更高级的功能,如对齐、原子操作、泛型选择、无返回函数声明、静态断言和线程局部存储。不过,请注意,_Alignas
、_Alignof
、_Atomic
、_Thread_local
等通常以_
开头的关键字是编译器特定的扩展,而C11标准通过_Alignas
、alignof
(非_
开头)、_Atomic
(但通常使用<stdatomic.h>
中的类型)、_Thread_local
(但通常作为类型修饰符而非关键字)等方式提供了类似的功能。_Generic
和_Static_assert
则是以_
开头的关键字,但它们是C11标准的一部分。