C语言保留字
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(),以及 头文件
_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:限定了变量不能在多线程之间共享