C语言关键字温故

    C语言的关键字共有32个。

    一、数据类型关键字(12个):

关键字

作用

char

声明字符型变量或函数

double

声明双精度变量或函数

float

声明浮点型变量或函数

int

声明整型变量或函数

short

声明短整型变量或函数

long

声明长整型变量或函数

signed

声明有符号类型变量或函数

unsigned

声明无符号类型变量或函数

void

声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)

enum

声明枚举类型

struct

声明结构体变量或函数

union

声明联合数据类型

二、控制语句关键字(12个):

分类

关键字

作用

循环语句

 for

一种循环语句(可意会不可言传)

do

循环语句的循环体 

while 

循环语句的循环条件

break

跳出当前循环

continue

结束当前循环,开始下一轮循环 

条件语句

if

条件语句

else 

条件语句否定分支(与 if 连用)

goto

无条件跳转语句

开关语句

switch 

用于开关语句

case

开关语句分支

default

开关语句中的“其他”分支 

return 

子程序返回语句(可以带参数,也看不带参数) 

三、存储类型关键字(4个)

关键字

作用

auto 

声明自动变量一般不使用

extern

声明变量是在其他文件中声明(也可以看做是引用变量)

register

声明寄存器变量 

static 

声明静态变量

四、其他关键字(4个)

关键字

作用

 

const 

声明只读变量

常量修饰符,类型限定词

sizeof

计算数据类型长度

typedef

用以给数据类型取别名(当然还有其他作用) 

存储类关键词

volatile

说明变量在程序执行中可被隐含地改变

类型修饰符(type specifier),指令关键字。

Volatile应该解释为直接存取原始内存地址比较合适。作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

使用地方:

1、中断服务程序修改的供其他程序检测的变量需要加volatile

2、多任务环境下各任务间共享的标志应该加volatile

3、存储器映射的硬件寄存器通常要加volatile,因为每次对它的读写都可能有不同意义

Const:

要求它所修饰的对象为常量,不可被改变,不可被赋值,不可作为左值

1、 可以定义const常量,具有不可变性。

2、 便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患

使用地方:

1、 在函数声明时修饰参数

memmove(void *dst,  const void *src,  size_t len);

Static:

1、 static修饰一个函数,则这个函数只能在本文本中调用,不能被其他文件调用。

2、 static修饰局部变量,则这个局部变量存放在全局数据区的静态变量区,初始化时自动初始化为0初始化操作只执行一次;这个局部变量的生命周期延长,直到程序运行结束以后才释放。

3、 static修饰全局变量,则这个全局变量只能在本文件中访问,不能在其他文件中访问。即便是extern外部声明也不可以。

Typedef

1、 typedef没有创建任何新类型,它只是为某个已存在的类型增加一个方便使用的标签。

2、 #define不同,typedef创建的符号名只受限于类型,不能用于值

3、 typedef由编译器解释,不是预处理器

4、 定义函数指针

typedef  返回类型(*新类型)(参数表)

typedef char (*PTRFUN)(int);

typedef的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型,并定义这

种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型。

typedef VOID (*oal_callback_t)(VOID);  //定义一类函数指针, 该类指针指向的函数入参和返回值都为空

inline 内联函数

C语言中,如果一些函数被频繁调用,不断有函数入栈,即函数栈,会造成栈空间的大量消耗。

1、          关键字inline必须与函数定义体放在一起才能使函数成为内联,仅将inline放在函数声明前面不起任何作用。

2、           inline只适合函数体内代码简单的函数使用,不能包含复杂的结构控制语句例如whileswitch,并且内联函数本身不能是直接递归函数(自己内部还调用自己的函数)

3、          内联是以代码膨胀(复制)为代价。仅仅省去了函数调用的开销,从而提高函数的执行效率。

4、          每一次内联函数的调用都要赋值代码,将使程序的总代码量增大,消耗更多的内存空间。










猜你喜欢

转载自blog.csdn.net/a805101628/article/details/79753576
今日推荐