C语言保留字

其实这篇文章没啥看头的,是网上搜的随手粘贴汇总

1999年12月16日,ISO推出了C99标准,该标准新增了5个C语言关键字: inline| restrict| _Bool |_Complex| _Imaginary(注意bool 从来不是C语言的关键字)

2011年12月8日,ISO发布C语言的新标准C11,该标准新增了7个C语言关键字: _Alignas| _Alignof| _Atomic| _Static_assert| _Noreturn| _Thread| _local| _Generic

原关键字

保留字 作用
auto 指定变量的存储类型,是默认值
break 跳出循环或switch语句
case 定义switch中的case子句
char 定义字符型变量或指针
const 定义常量或参数
continue 在循环语句中,回到循环体的开始处重新执行循环
default 定义switch中的default子句
do 定义do-while语句
double 定义双精度浮点数变量
else 定义枚举类型
enum 声明外部变量或函数
extern 声明外部变量或函数
float 定义浮点型变量或指针
for 定义for语句
goto 定义goto语句
if 定义if语句或if-else语句
int 定义整型变量或指针
long 定义长整型变量或指针
register 指定变量的存储类型是寄存器变量,Turbo c中用自动变量代替
return 从函数返回
short 定义短整型变量或指针
signed 定义有符号的整型变量或指针
sizeof 获取某种类型的变量或数据所占内存的大小,是运算符
static 指定变量的存储类型是静态变量,或指定函数是静态函数
struct 定义结构体类型
switch 定义switch语句
typedef 为数据类型定义别名
union 定义无符号的整型或字符型变量或指针
unsigned 定义无符号的整型变量或数据
void 定义空类型变量或空类型指针,或指定函数没有返回值
volatile 变量的值可能在程序的外部被改变
while 定义while或do-while语句

c99新增关键字

_Bool:布尔类型 以前的c中的bool都是程序员自己定义的。 #define bool _Bool #define false 0 #define true 1 _Bool大小为1byte

_Complex:复数类型 float _Complex、double _Complex、long double _Complex float _Complex fCex = 1.0f + 1.0if; //实数 虚数 一起赋值 实部的获取crealf,虚部的获取cimagf

_Imaginary:虚数类型 float _Imaginary、double _Imaginary、long double _Imaginary 因为_Complex(复数类型)里面已经包含虚数了,所以部分编译器都只实现了_Complex(复数类型)而没有实现_Imaginary(虚数类型)。

inline:内联 编译器接受建议的话,会在调用处展开内联函数,减少跳转、换页操作,提高效率。 适合简单函数。不能定义可改变的static变量。

restrict:限定指针 只用于限定指针;该关键字用于告知编译器,所有修改该指针所指向内容的操作全部都是基于(base on)该指针的,即不存在其它进行修改操作的途径;这样的后果是帮助编译器进行更好的代码优化,生成更有效率的汇编代码。

C11 新增关键字

_Alignas:内存对齐指示符 以前往往通过编译器的编译参数指定内存对齐方式。

_Alignof:对齐处理操作符 函数 aligned_alloc(),以及 头文件 。 对齐内存有利于提高程序运行效率,内存访问效率。 alignof(Foo) //值为4,对齐长度 sizeof(Foo) //结构体的总大小:12

_Atomic:原子操作 _Atomic int i; //原子类型的变量 atomic_store(&i,12); //stdatomic.h中的宏

_Generic:泛型 _Generic((var), type1:…, type2: …, ……, default:…) #define GENERAL_ABS(x) _Generic((x),int:abs,float:fabsf,double:fabs)(x) 根据类型不同调用不同的函数,类似函数模板。

_Noreturn:指定该函数不返回到其调用点。 _Static_assert:静态断言 在编译时刻进行,断言表达式必须是在编译时期可以计算的表达式

_Thread_local:限定了变量不能在多线程之间共享