C语言中32个关键字详解
由 ANSI 标准定义的 C 语言关键字共32个,根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。
一、数据类型关键字
A 基本数据类型(5个)
void:声明函数无返回值或无参数,声明无类型指针,显示丢弃去处结果
char:字符型类型数据,属于整型数据的一种
int:整型数据,通常为编译器指定的机器字长
float:单精度浮点数据,属于浮点数据的一种
double:双精度浮点数据,属于浮点数据的一种
B 类型修饰关键字(4个)
short:修饰 int,短整型数据,可省略被修饰的 int
long:修饰 int,长整形数据,可省略被修饰的 int
signed:修饰整型数据,有符号数据类型
unsigned:修饰整型数据,无符号数据类型
C 复杂类型关键字(5个)
struct:结构体声明
union:共用体声明
enum:枚举声明
typedef:声明类型别名
sizeof:得到特定类型或特定类型、变量的大小
D 存储级别关键字(6个)
auto:指定为自动亦是,由编译器自动分配及释放。通常在栈上分配
static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数指针作用域为文件内部
register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数
extern:指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的变量
const:与 volatile 合称“CV特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其它线程/进程改变)
volatile:与 const 合称“CV特性”,指定变量的值有可被系统或其它线程/进程改变,强制编译器每次从内存中取得该变量的值
二、流程控制关键字
A 跳转结构(4个)
return:用在函数体中,返回特定的值(或者是 void 值,即不返回值)
continue:结束当前循环,开始下一轮循环
break:跳出当前循环或 switch 结构
goto:无条件跳转语句
B 分支结构(5个)
if:条件语句
else:条件语句否定分支(与 if �连用)
switch:开关语句(多重分支语句)
case:开关语句中的分支标记
default:开关语句中的“其它”分治,可选
C 循环结构(3个)
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为循环条件以上循环语句,当循环条件表达式为真则继续,是假则跳出循环。
三、C99 和 C89 标准对比多了些什么
1、restrict:指针类型修饰符
C99 中增加了适用于指针的 restrict 类型修饰符,它是�初始访问指针所指所指对象的唯一途径,因此只有借助 restrict 指针表达式才能访问对象。restrict 指针主要用做函数变元,或者指向由 malloc() 函数所分配的内存变量。restrict 数据类型不改变程序的语义。
如果某个函数定义了两个 restrict 指针变元,编译器就假定它们指向两个不同的对象,memcpy()函数就是 restrict 指针的一个典型应用示例。C89 中的 memcpy()函数原型如下:
代码:
void *memcpy(void *s1, const void *s2, size_t size);
如果 s1 和 s2 所指向的对象重叠,其操作就是未定义的。memcpy()函数中只能用于不重叠的对象。C99 中的 memcpy()函数原型如下:
代码:
void *memcpy(void * restrict s1, const void * restrict s2, size_t size);
通过使用 restrict 修饰 s1 和 s2 变元,可确保它们在该原型中指定不同的对象。
2、inline(内联)关键字
内联函数除了保持结构化和函数式的�定义方式外,还能使程序员写出高效率的代码。函数的每次调用与返回都会消耗相当大的系统资源,尤其是当函数调用发生在重复次数很多的循环语句中时。一般情况下,当发生一次函数调用时,变元需要进栈,各种�寄存器内存需要保存。当函数返回时,寄存器的内存需要恢复。如果该函数在代码内进行联机扩展,当代码执行时,这��些保存和恢复操作旅游活动会再发生,而且函数调用的执行速度也会大大加快。函数的联机扩展会产生较长的代码,所以只应该内联对应程序性能有显著影响的函数以及长度较短的函数。
3、新增数据类型
_Bool
值是0或1。C99 中增加了用来定义 bool、true 以及 false 宏的头文件夹<stdbool.h>,以便程序员能够编写同时兼容于 C 与 C++ 的应用程序。在�编写新的应用程序时,应该使用 <stdbool.h> 头文件中的 bool 宏。