作用域、链接属性和存储类型

作用域:标识符的作用域就是程序中该标识符可以使用的区域。分为4种:文件作用域、函数作用域、代码块作用域和圆形作用域.

文件作用域:任何在所有代码块之外声明的标志符都具有文件作用域,它表示这些标志符从它们的声明处知道它所在的源文件结尾处都是可以访问的。

代码块作用域: 位于一堆花括号之间的所有语句称为一个代码块。任何在代码块的开始位置声明的标志符都具有代码块作用域,表示他们可以被这个代码块中的所有语句访问。

原型作用域: 原型作用域只适用于在函数原型中声明的参数名,在原型中,参数的名字不是必需的,也不必与函数定义中的形参名匹配。

函数作用域: 它只适用于语句标签,语句标签用于goto语句,规则是一个函数中的所有语句标签必须是唯一。

链接属性: 标识符的链接属性决定如何处理在不同文件中出现的标志符。共有3种: external(外部的)、internal(内部的)和none(无)。

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

属于internal链接属性的标志符在同一个源文件内的所有声明中都指同一个实体,但位于不同源文件的多个声明则分属不同的实体。

属于external链接属性的标志符不论声明多少次,位于几个源文件都表示同一个实体。

关键字extern和static用于在生命中修改标识符的链接属性。如果某个声明在正常情况下具有external链接属性,在它前面加上static关键字可以使它的链接属性变为internal,

static只对缺省链接属性为external的声明才有改变链接属性的效果;一般而言,,extern为一个标志符制定external链接属性。

存储类型:指存储变量值的内存类型。变量的存储类型决定变量何时创建、何时销毁以及它的值保持多久。

凡是在任何代码块之外声明的变量总是存储于静态内存中,即不属于堆栈的内存中。静态变量在程序运行之前创建,在程序的整个执行期间始终存在。它始终保持原先的值,

除非给它富裕一个不同的值或者程序结束。

在代码块内部声明的变量的缺省存储类型是自动档,即它存储与堆栈中,称为自动变量。在程序执行到声明自动变量的代码块时,自动变量才被创建,当程序的执行流离开

该代码块时,这些自动变量便自行消费。

对于在代码块内部声明的变量,如果在它的前面加上关键字static,可以使它的存储类型从自动变为静态。但作用域不能改变。函数形参不能声明为静态。

关键字register可以用于自动变量的生命,提示它们应该存储于机器的硬件寄存器而不是内存中,称为寄存器变量。但编译器可以不理睬register关键字。

伟人所达到并保持着的高处,并不是一飞就到的,

作用域、链接属性和存储类型

相关文章:

你感兴趣的文章:

标签云: