您的位置:首页 > 其它

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

2013-08-10 20:32 302 查看
标准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寄存器中,可以避免在寄存器和内存之间频繁地交换数据,因此能够提高程序的运行效率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐