1.总述
关键词是由C语言规定的具有特定意义的字符串,通常也称为保留字,用户定义的标识符不应与关键词相同,C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类,具体如以下表格中显示:
类型 | 关键词 | 简要说明 |
数据类型关键字 | char | 声明字符型变量或函数 |
double | 声明双精度变量或函数 | |
enum | 声明枚举类型 | |
float | 声明浮点型变量或函数 | |
int | 声明整型变量或函数 | |
long | 声明长整型变量或函数 | |
short | 声明短整型变量或函数 | |
signed | 声明有符号类型变量或函数 | |
struct | 声明结构体变量或函数 | |
union | 声明共用体数据类型 | |
unsigned | 声明无符号类型变量或函数 | |
void | 声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用) | |
控制语句关键字 | for | 一种循环语句(循环语句关键词) |
do | 循环语句的循环体(循环语句关键词) | |
while | 循环语句的循环条件(循环语句关键词) | |
break | 跳出当前循环(循环语句关键词) | |
continue | 结束当前循环,开始下一轮循环(循环语句关键词) | |
if | 条件语句分支(条件语句关键词) | |
else | 条件语句否定分支(条件语句关键词) | |
goto | 无条件跳转语句(条件语句关键词) | |
switch | 用于开关语句(开关语句) | |
case | 开关语句分支(开关语句) | |
default | 开关语句中的“其他”分支(开关语句) | |
return | 子程序返回语句(返回语句) | |
存储类型关键字 | auto | 声明自动变量(一般不使用) |
extern | 声明变量是在其他文件正声明(也可以看做是引用变量) | |
register | 声明寄存器变量 | |
static | 声明静态变量 | |
其它关键字 | const | 声明常类型,常类型的变量或对象的值是不能被更新的,可使用在常量定义,指针定义,函数定义等处,与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变) |
sizeof | 用于计算特定类型或特定类型变量的数据类型长度 | |
typedef | 常规变量类型定义,数据类型取别名,指针类型定义,函数地址说明,函数声明,函数指针定义等 | |
volatile | 说明变量在程序执行中可被隐含地改变 说明变量在程序执行中可被隐含地改变,与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值 |
2.部分关键词进一步说明
下面针对enum,static,union,extern,const,typedef,volatile这几个关键词做出较为详细的说明:
2.1 enum
在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。
如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。设有变量DAY1,DAY2,DAY3被说明为上述的DAY,可采用下述任一种方式:
enum DAY { SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY };
enum weekday DAY1,DAY2,DAY3;
或者为:
enum DAY { SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY } DAY1,DAY2,DAY3;
或者为:
enum { SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY } DAY1,DAY2,DAY3;
例:
#include <>
int main()
{
enum DAY { SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY } DAY1,DAY2,DAY3;
DAY1=SUNDAY;
DAY2=MONDAY;
DAY3=TUESDAY;
printf("%d,%d,%d\n",DAY1,DAY2,DAY3);
DAY1=(enum DAY)2;
printf("%d,%d,%d\n",DAY1,DAY2,DAY3);
}
输出结果:
0,1,2
2,1,2
注:
枚举值是常量,不是变量,不能在程序中用赋值语句再对它赋值;
枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。如在DAY中,SUNDAY值为0,MONDAY值为1,…,SATURDAY值为6;
只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量;
如一定要把数值赋予枚举变量,则必须用强制类型转换;
枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号;
例:
#include <>
int main()
{
enum DAY { SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY } DAY1,DAY2,DAY3;
DAY1=SUNDAY;//正确,能把枚举值赋予枚举变量
DAY2=MONDAY;//正确,能把枚举值赋予枚举变量
DAY3=TUESDAY;//正确,能把枚举值赋予枚举变量
DAY1=(enum DAY)0;//正确,如一定要把数值赋予枚举变量,则必须用强制类型转换,其意义是将顺序号为0的枚举元素赋予枚举变量DAY1
DAY2=(enum DAY)1;//正确,如一定要把数值赋予枚举变量,则必须用强制类型转换,其意义是将顺序号为1的枚举元素赋予枚举变量DAY2
DAY3=(enum DAY)2;//正确,如一定要把数值赋予枚举变量,则必须用强制类型转换,其意义是将顺序号为2的枚举元素赋予枚举变量DAY3
/*对于DAY1=0;DAY2=1;DAY3=2;的编译在ubuntu的编译器下可以通过且可以把相应的值赋给相应变量,但是在VC下编译报错*/
DAY1=0;//错误,不能把元素的数值直接赋予枚举变量
DAY2=1;//错误,不能把元素的数值直接赋予枚举变量
DAY3=2;//错误,不能把元素的数值直接赋予枚举变量
SUNDAY=5;//错误,枚举值是常量,不是变量,不能在程序中用赋值语句再对它赋值
MONDAY=6;//错误,枚举值是常量,不是变量,不能在程序中用赋值语句再对它赋值
return 0;
}
//正确,能把枚举值赋予枚举变量
DAY2=MONDAY;//正确,能把枚举值赋予枚举变量
DAY3=TUESDAY;//正确,能把枚举值赋予枚举变量
DAY1=(enum DAY)0;//正确,如一定要把数值赋予枚举变量,则必须用强制类型转换,其意义是将顺序号为0的枚举元素赋予枚举变量DAY1
DAY2=(enum DAY)1;//正确,如一定要把数值赋予枚举变量,则必须用强制类型转换,其意义是将顺序号为1的枚举元素赋予枚举变量DAY2
DAY3=(enum DAY)2;//正确,如一定要把数值赋予枚举变量,则必须用强制类型转换,其意义是将顺序号为2的枚举元素赋予枚举变量DAY3
/*对于DAY1=0;DAY2=1;DAY3=2;的编译在ubuntu的编译器下可以通过且可以把相应的值赋给相应变量,但是在VC下编译报错*/
DAY1=0;//错误,不能把元素的数值直接赋予枚举变量
DAY2=1;//错误,不能把元素的数值直接赋予枚举变量
DAY3=2;//错误,不能把元素的数值直接赋予枚举变量
SUNDAY=5;//错误,枚举值是常量,不是变量,不能在程序中用赋值语句再对它赋值
MONDAY=6;//错误,枚举值是常量,不是变量,不能在程序中用赋值语句再对它赋值
return 0;
}
注:枚举值的常量值在没有被赋值的情况下,系统默认给它的第一个值赋0,后面的依次为1,2,3;不过也可以直接指定某个或者某些枚举值的数值,比如说,星期日对应0对中国人来说不好接受,那么我们这样定义: enum DAY { MONDAY=1,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY } ;这样的话,TUESDAY就将等于2,直接到SUNDAY等于7. 另:枚举类型定义规定,默认低一些枚举成员值为0,后一项枚举成员的值自动取前一项的枚举成员的值加1,在实际应用中,第一项的值不一定为0,所有的枚举变量也不一定是连续的,这时就需要显示赋值。 另:枚举赋值时不可以有重复,否则会报错;尽量从小到大排列,虽然乱序编译不会报错,但是会影响阅读和维护。
例:
TEST
{
TEST1=1, //从1开始,而不是0
TEST2, //默认加1,所以TEST2为2
TEST10=10,//出现不连续,TEST10是10
TEST11 //上一个值加一得到TEST11是11
}
2.2 static
【C/C++】复习关键字static
C++中类的static成员变量和static成员函数
2.3 typedef
C语言typedef的用法详解
typedef 可以给数组、指针、结构体等类型定义别名。
来看一个给数组类型定义别名的例子:
typedef char ARRAY20[20];
表示 ARRAY20 是类型char[20]的别名。它是一个长度为20的数组类型。接着可以用ARRAY20定义数组:
ARRAY20 a1, a2, s1, s2;
它等价于:
char a1[20], a2[20], s1[20], s2[20];
注意,数组也是有类型的。例如char a1[20];定义了一个数组 a1,它的类型就是 char [20]。
2.4 SWITCH
switch statement (C++)