天天看点

C语言学习之二:链接属性和存储类型

1.链接属性

链接属性用于决定如何处理在不同文件中出现的标识符,一共有三种类型的连接属性:external,internal和none。

没有链接属性的标识符(none)总是被当作单独的个体,也就是说该标识符的多个声明被当作独立不同的实体。

属于internal链接属性的标识在同一个源文件中被当作同一个实体,但在不同的源文件中被当作不同的实体。

属于external链接属性的标识符不论声明多少次、不论是否在同一个源文件中,总是被当作同一个实体。

具有文件作用域的标识符默认为external链接属性,可以在这些标识符前面加上static关键字,使其链接属性变更为internal;

其它作用域的标识符默认具有none标识符,在标识符加上extern关键字,使其链接属性变更为external。

2.存储类型

变量的存储类型是指存储变量值的内存类型,有三个地方可以保存变量:普通内存、运行时堆栈和硬件寄存器.

在任何代码块之外声明的变量总是存储于静态内存中,这类变量称为静态变量。静态变量在程序运行过程之前创建,并在程序运行过程中始终存在。如果不显式的初始化这类变量,此类变量将被自动初始化为0。这类变量无法再指定其它的存储类型。

在代码块之类声明的变量的缺省类型为自动的,如果给这类变量加上 static 关键字,则其存储类型变为静态变量。自动变量不会显式的初始化,如果在定义时指定其初始值,则编译时会在代码的起始处插入一条隐式的赋值语句。

关键字 register 可以用于自动变量的声明,提示它们应该存储于机器的硬件寄存器而不是内存中,这类变量称为寄存器变量。

继续阅读