第一类:数据类型关键字
A 基本数据类型
关键字名称 |
作用 |
void
|
声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果。 |
char
|
字符型类型数据,属于整型数据的一种。 |
int
|
整型数据,通常为编译器指定的机器字长。 |
float
|
单精度浮点型数据,属于浮点数据的一种,小数点后保存6位。 |
double
|
双精度浮点型数据,属于浮点数据的一种,比float保存的精度高,小数点后保存15/16位。 |
B 类型修饰关键字
关键字名称 |
作用 |
short
|
修饰int,短整型数据,可省略被修饰的int。 |
long
|
修饰int,长整形数据,可省略被修饰的int。 |
signed
|
修饰整型数据,有符号数据类型。 |
unsigned
|
修饰整型数据,无符号数据类型。 |
C 复杂类型关键字
关键字名称 |
作用 |
struct
|
结构体声明。 |
union
|
共用体声明。 |
enum
|
枚举声明。 |
typedef
|
声明类型别名。 |
sizeof
|
得到特定类型或特定类型变量的大小。 |
D 存储级别关键字
关键字名称 |
作用 |
auto
|
指定为自动变量,由编译器自动分配及释放。通常在栈上分配。 |
static
|
指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部。 |
register
|
指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数。 |
extern
|
指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的。 |
const
|
与volatile合称“cv特性“,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变) |
volatile
|
与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值。 |
volatile关键字是一种类型修饰符,用它生命的类型变量不经过赋值也可以被某些编译器未知的因素更改。例如操作系统、硬件或者其他线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,执行部件每次都会从该变量相应的内存单元中取出其值,从而可以提供对特殊地址的稳定访问
第二类:流程控制关键字
A 跳转结构
关键字名称 |
作用 |
return
|
用在函数体中,返回特定值(或者是void值,即不返回值)。 |
continue
|
结束当前循环,开始下一轮循环。 |
break
|
跳出当前循环或switch结构。 |
goto
|
无条件跳转语句。 |
B 分支结构
关键字名称 |
作用 |
if
|
条件语句。 |
else
|
条件语句否定分支(与if连用)。 |
switch
|
开关语句(多重分支语句)。 |
case
|
开关语句中的分支标记。 |
default
|
开关语句中的“其他”分治,可选。 |
C循环结构
关键字名称 |
作用 |
for
|
for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2…循环,其中2为循环条件。 |
do
|
do循环结构,do 1 while(2);的执行顺序是1->2->1…循环,2为循环条件。 |
while
|
while循环结构,while(1) 2;的执行顺序是1->2->1…循环,1为循环条件, 以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。 |
以上是C89定义了32个关键词(keyword)
1999年12月16日,ISO推出了C99标准,该标准新增了5个C语言关键字:inline, restrict, _Bool ,_Complex ,_Imaginary(注意bool 从来不是C语言的关键字)。
关键字名称 |
作用 |
_Bool |
bool类型变量, 等价于 unsigned char . 只有0和1 |
_Complex |
对于C99 标准定义,存在 float _Complex, double _Complex,long double _Complex 复数类型 |
_Imaginary |
虚数类型。_Complex 复数类型的虚部。例如 10.0i, 10.8if 等等。这个关键字在VS 上没有实现。其实我也觉得没有必要。和_Complex有重叠 |
inline |
内联函数,从C++中引入的概念。就是将小函数直接嵌入到代码中。C的代码损耗在于函数的进出栈。要是可以推荐用内联函数替代宏。宏能不用就不用。函数什么的时候不要加inline 需要加extern,定义的时候需要加inline |
restrict |
这是很装逼的关键字用于编译器优化。关键字restrict只用于限定指针;该关键字用于告知编译器,所有修改该指针所指向内容的操作全部都是基于(base on)该指针的,即不存在其它进行修改操作的途径;这样的后果是帮助编译器进行更好的代码优化,生成更有效率的汇编代码。 |
2011年12月8日,ISO发布C语言的新标准C11,该标准新增了7个C语言关键字:_Alignas ,_Alignof ,_Atomic, _Static_assert ,_Noreturn ,_Thread_local ,_Generic。
关键字名称 |
作用 |
_Alignas |
内存对齐的操作符。需要和_Alignof配合使用,指定结构的对齐方式 |
_Alignof |
得到类型和变量的对齐方式 |
_Atomic |
原子操作, 原子锁。gcc 很早就支持 |
_Static_assert |
编译器期间断言,当 #if #error 搞完毕(预编译)之后,编译器断言。assert是运行时断言。用的时候看具体的需求 |
_Noreturn |
修饰函数,绝对不会有返回值。_Noreturn 声明的函数不会返回。引入此新的函数修饰符有两个目的:消除编译器对没有return的函数的警告。允许某种只针对不返回函数的优化 |
_Thread_local |
_Thread_local是新的存储类修饰符,限定了变量不能在多线程之间共享 |
_Generic |
这个比较叼,C的泛函机制。 高级函数宏 |