1.C语言关键字汇总
我们在给标识符起名时,要避免这些关键字
auto(自动) | int | double | long | continue | do |
char | float | short | signed(默认) | while | if |
unsigned | struct(结构体) | union(共用体) | enum(枚举,enumerate) | else | for |
static(静态) | switch | case | default | goto | sizeof |
break | register(寄存器) | const(只读) | volatile | restrict | inline |
typedef | extern(外部) | return | void(修饰函数) | _Complex | _Bool |
2.数据类型相关的关键字
我们之前已经大致讲过了,现在快速回顾一下:
char:字符型,占一个字节(8位),其取值范围是-128 ~ 127(对应的就是8位有符号整型,-2^7 ~(2^7-1))
unsigned char:无符号字符型,占一个字节(8位),其取值范围是0 ~ 255(对应的就是8位无符号整型,0 ~(2^8-1))
short:(有符号)短整型,占两个字节(16位),其取值范围是-32768~32767(-2^15 ~(2^15-1))
unsigned short:无符号短整型,占两个字节(16位),其取值范围是0 ~ 65535(0 ~ 2^16-1)。
int:(有符号)整型,占四个字节(32位)
unsigned int:无符号整型,占四个字节(32位)
long:(有符号)长整型,占四个字节(32位)
unsigned long:无符号长整型,占四个字节(32位)
long long:(有符号)长长整型,占八个字节(64位)
unsigned long long:无符号长长整型,占八个字节(64位)
float:单精度浮点型,占四个字节(32位),其取值范围是-3.4×10^(-37) ~ +3.4×10^(38),计算方法见此。
double:双精度浮点型,占八个字节(64位),其取值范围是- 1.7×10^(-307) ~ +1.7×10^(308),计算方法见此。
3.存储相关的关键字
1、register:寄存器的意思,它修饰的是寄存器变量。用的少。
- 一般的变量定义时,这一变量会被分配在内存当中,这一变量有地址编号;而用register修饰变量时,会在编译的时候告诉编译器这一变量是寄存器变量,尽量将这一变量分配在寄存器当中(因为寄存器的资源非常宝贵)。
- 由于没有分配地址编号,从而不能对用register修饰的变量取地址。
- cpu取数据时,到寄存器中拿数据要比从内存当中拿数据要快(这是定义寄存器变量的目的)
- 不能定义寄存器数组(因为寄存器的资源非常宝贵)
- register只能修饰字符型和整型数据,不能修饰浮点型
2、static:静态的意思,它可以修饰全局变量、局部变量、函数。
- 分别称为静态全局变量、静态局部变量、内部函数。
3、const:常量的意思,只读,不能修改它的值,它修饰变量和指针。
4、extern:外部的意思,一般在头文件中声明函数和全局变量。
4.控制语句相关的关键字
在流程控制中讲过,快读回顾一下,我们另外再讲一个goto:
1、跳转语句goto:
- 用法:在程序中写标签,标签的命名规则符合标识符的规则就行,标签可以在程序的任意位置,用法是“标签名:”。然后程序中写“goto 标签名;”后就可以跳转到标签对应的位置继续向下执行。
- 通常用于从内层循环体中跳到外层循环体外
- 不建议过多使用goto,因为这样会大乱程序的逻辑,程序可读性差。
5.其他关键字
1、sizeof:计算操作数的类型长度(以字节为单位),操作数可以是数据类型(如sizeof(int)),表达式,变量名,指针,数组,函数;sizeof内的语句不会被编译执行,而是被类型所替代。
2、typedef:给一个已有的类型名(比如int、short、 float、结构体等) 重新取一个类型名
- 并没有创造一个新的类型
- 书写位置:宏定义位置
- 在单片机中,我们可能经常看到以下关键字
typedef char INT8; //将char重命名为INT8 typedef short INT16; //将short重命名为INT16 typedef int INT32; //将int重命名为INT32 typedef _int64 INT64; //将_int64重命名为INT64 typedef unsigned char U8; //将unsigned char重命名为U8 typedef unsigned short U16; //将unsigned short重命名为U16 typedef unsigned int U32; //将unsigned int重命名为U32 typedef unsigned _int64 U64;//将unsigned _int64重命名为U64
3、volatile:是挥发的,易失的,易改变的意思。用volatile定义的变量是告诉CPU每次使用这一变量时,都需要重新去内存中去取,保证用的变量是最新的值,而不是寄存器中的备份。
- 注1:cpu取变量数据时,是先将数据从内存当中取出,放入寄存器中,然后cpu再去使用。
- 注2:后续可能会有多任务,当第一个任务取了这一变量,之后进入暂停状态挂起,第二个任务可能会将这一变量给改变了。