链接属性与储存类型的总结

来源:互联网 发布:中文翻译缅甸语言软件 编辑:程序博客网 时间:2024/05/16 10:23

一、链接属性

1、意义:标识符的链接属性决定如何处理在不同文件中出现的标识符。

2、分类:

链接属性分为external,internal,none。

a、对于none类型,其总是被当做单独个体,且该标识符的多个声明被当做独立的实体。

b、对于internal类型,在同一源文件内,所有声明都是同一个实体,但是属于不同源文件的声明被当做不同的实体。

c、对于external类型,无论声明多少次,位于多少个源文件,其均被当做同一个实体。

3、链接属性的extern与static

extern和static用于在声明中修改标识符的链接属性。

a、static:若某声明具有缺省的external链接属性,则在前面加上static可以使其的链接属性变为internal(static只对缺省链接属性为external的声明有效),但标识符的储    存类型和作用域不受影响。

b、extern:一般情况下,其为一个标识符指定external链接属性,以此访问其它位置定义的实体。(当extern用于源文件中某标识符的第一次声明才有效。如果位于标识符第     二次或之后的声明,则不会改变第一次声明指定的链接属性)

二、储存类型

1、意义:变量的储存类型是指存储变量值的内存类型。其决定变量何时创建,何时销毁,以及它将保存多长时间。而变量的缺省储存类型决定于其声明的位置。

2、分类:有三个储存变量的地方:普通内存,运行时堆栈,硬件寄存器。

a、静态变量:在任何代码块之外声明的变量,总储存于静态内存中,即不属于堆栈的内存,由static修饰。对于此类变量,无法指定其他存储类型。它在程序运行之前创   建, 在程序的整个执行期间始终存在。它保持原先的值,直到给它赋新值或程序结束。对于静态变量的初始化,因为其会缺省地初始化为0,所以我们可以

   将想要初始化的值放在其会使用的位置。

b、自动变量:在代码块内部声明的变量的缺省储存类型是自动的,其位于堆栈中,由auto修饰。在程序执行到声明变量的代码块时,自动变量被创建。当程序离开代码块   时,自动变量被销毁。如果不对其进行显式的初始化,其值总是垃圾。

c、代码块内部的static:在代码块内部声明的变量,如果给它加上static,可使其储存类型从自动变为静态(函数的形参不能声明为静态,因为实参总在堆栈中传给函    数)。但变量的链接属性和作用域不会改变。

d、register:register可以用于声明自动变量,提示其储存于机器的硬件寄存器,而不是内存中。寄存器变量的创建与销毁同自动变量,但是,在使用寄存器变量的函数返回之前,必须恢复之前的寄存器的值以确保寄存器变量未损坏。而许多机器通过堆栈完成这一过程,因此可能反而会增加负担。


0 0