C语言中的关键字



C语言中主要的关键字有register,static,extern,const等等,下面来一一介绍他们


在介绍register之前,我们先来了解一下计算机和cpu的结构

计算机的三大组成:

CPU,硬盘,内存

CPU的三大组成:

运算器,控制器,存储器(主要指寄存器)

一、register

1.作用:请求编译器尽可能的将变量存在CPU的内部寄存器中,这样可以省去CPU从内存中抓取数据的时间,可以提高执行效率

2.什么时候使用:通常用来定义频繁访问的变量

3.注意事项:

①只能用来修饰局部变量,不能修饰全局变量
原因:全局变量可以被多个进程访问,如果被定义为register型,只有当前进程可以知道该变量保存的位置,其它进程会不知道这个变量保存的位置

②不能用“&”来获取这个变量的地址
原因:“&”获取的是内存的地址,而register型变量保存在CPU的寄存器中

③一定要是CPU可以接受的数据类型


二、static

1.既能修饰变量,也能修饰函数

①修饰局部变量:延长局部变量的生命周期,试其在程序结束后再释放

②修饰全局变量:只在本文件中可见,其他文件中不可见

③修饰函数:只能在本文件中调用,不能被其他文件调用

2.什么时候使用:想让一个局部变量执行完不立即释放

3.与全局变量相比,起到保护变量的作用,原因是全局变量对程序中所有进程可见,任何进程都可以修改

4.其定义的变量保存在静态数据区


三、extern

1.外部声明变量,是指当前变量或函数不是在本源文件中声明的

2.在定义时一定要标注变量的类型


四、const

1.const修饰的变量称为只读变量

以const int num = 5 为例

num对应的空间是可变的,但是不能通过const修饰的变量名(即const)来修改其值

2.注意事项:

要对变量做初始化,否则后面会不能修改其值

3.函数形参前加const的作用:

防止函数对实参的值进行修改


五、typedef

1.作用

为一种数据类型定义一个新名字

2.优点

①提高代码的移植性

②方便定义变量(简化复杂的类型声明)

③可以解释某些变量,对变量起到注释作用


六、Volatile

1.作用:作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。volatile 变量是随时可能发生变化的,提醒编译器与volatile变量有关的运算,不要进行编译优化,以免出错。简单地说就是防止编译器对代码进行优化。

2.什么时候使用

①告诉compiler不能对这个变量做任何优化

②表示用volatile定义的变量会在程序外被改变,每次都必须从内存中读取,而不能把他放在cache或寄存器中重复使用


七、Inline

1.作用

将一个函数定义为内联函数,将函数内部的实现直接搬到调用语句之后,提高执行效率

2.注意事项:

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

②定义在类声明之中的成员函数将自动地成为内联函数

③不是所有情况都适合使用内联函数

以下情况不宜使用内联:

(1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。

(2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。类的构造函数和析构函数容易让人误解成使用内联更有效。要当心构造函数和析构函数可能会隐藏一些行为,如“偷偷地”执行了基类或成员对象的构造函数和析构函数。所以不要随便地将构造函数和析构函数的定义体放在类声明中。一个好的编译器将会根据函数的定义体,自动地取消不值得的内联(这进一步说明了 inline 不应该出现在函数的声明中)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值