变量、常量和函数等存储类型

标准C语言定影了4种存储类型:extern、auto、static和register.

一个程序元素的存储类型与它的作用域、生存期限及连接类型具有微妙的关系,但一个具有作用域和连接类型的标识符不一定有存储类型。

上述存储类型分为两种生存期限:永久的(即整个程序执行期间都存在)和临时的(即暂时保存在堆栈和寄存器中)。

extern和static用来标识永久生存期限的变量和函数;

auto和register用来标识临时生存期限的变量(注意,只有变量才具有临时生存期限)。

一个变量或函数只能具有一种存储类型,当然也只能有一种生存期限。


(1)全局变量和全局函数的存储类型默认是extern的,能够被定义在他们之后的同一个编译单元的函数所调用。如果变量和函数被显示的加上extern声明,那么其他编译单元中的函数也能调用他们。

(2)局部变量默认具有auto存储类型,除非用static或register来定义,但他们的作用域均是程序块作用域,连接类型都是内连接,在进入函数的时候创建,在函数退出的时候销毁。register和auto只能用于声明局部变量和局部常量。

(3)全局常量的默认存储类型为static,除非定义了它的编译单元之外的其它编译单元中显示地用extern声明,否则不能被访问。

(4)局部符号常量(注意,不是函数内出现的字面常量)的默认存储类型为auto,除非显示地定义为static或register.

(5)函数的形参是局部变量,因此一般局部变量存储类型相同,但是最好不要声明为static.

(6)用register修饰的变量会被直接加载到CPU寄存器中,如果寄存器足以容纳的下它的话,把那些常使用的变量,如循环计数器等直接放到cpu寄存器中,可以避免在寄存器和内存之间频繁地交换数据,因此能够提高程序的运行效率。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值