1.作用域
1.1 概述
变量在程序的某个部分声明时,只能在程序的一定区域内才能访问,这个区域就成为作用域。作用域分为四种——文件作用域、函数作用域、代码块作用域和原型作用域。编译器通过变量声明的位置来确定作用域
1.2 文件作用域
当变量在所有代码块之外声明时就在文件作用域中,文件作用域的范围是从变量声明处一直到文件的结束。但如果声明在“.h”文件中,并且该文件被其他文件用#include 所包含,那该变量的作用域也会相应的扩大到包含文件的结束。
1.3 函数作用域
函数作用域只适用于语句标签,语句标签用于goto语句。一个函数作用域内的语句标签必须唯一。
1.4 代码块作用域
一对花括号之间的所有语句成为代码块作用域。在一个代码块作用域开始定义的变量可以被该代码块内的所有语句使用。
下面考虑两种情况:
代码块之间的嵌套
{
int a = 100;
{
int a;
}
}
此时内层的a就会把外层的a隐藏,如果修改内层a的值,不会影响外层的a
非嵌套的两个代码块
如果两个代码块之间没有交集,那么一个代码块的内的就语句不能使用另一个代码块内的变量。
1.5原型作用域
原型作用域适用于在函数声明中的参数名。
2.链接属性
2.1 概述
链接属性决定如何处理位于不同文件内的标识符。链接属性共有三种——external(外部)、internal(内部)、none(无)。
- 链接属性为none的标识符不论在那个文件内都是独立的个体。
- 链接属性为internal的标识符在同一个原文件内的所有声明均指向同一个实体
- 链接属性为external的标识符不论声明多少次,位于几个原文件内均表示同一实体
在文件作用域内声明的变量或是函数,在缺省的条件下链接属性为external,其余的为none
2.2 extern关键字
如果使用externa关键字声明某一个变