外部变量
external与internal是相对的,internal用于描述定义在函数内部的函数参数和变量,external用于外部变量
外部变量可以在全局范围内访问,可以替代函数参数与返回值方式进行函数之间数据交换
当几个函数必须共享数据,而这几个函数并不互相调用时,将共享数据定义为外部变量最方便
如果要在外部变量的定义之前使用该变量,或者外部变量的定义与变量的使用不在同一个源文件中,则必须在相应的变量声明中强制性地使用关键字extern
也可用static声明外部变量(静态变量),使该变量不能被其他文件引用,不过现在不提倡此法,现在常用的方法是将要限定的内容放在匿名命名空间中,由于各个匿名命名空间各不相同,所以另一个源文件不能使用别的匿名命名空间的变量和函数,实现了限定
extern修饰的全局变量放到头文件中,声明与定义可分开(声明用于说明变量的属性,主要是变量的类型;定义除此之外还将引起存储器的分配),static修饰的全局变量放到使用文件中,声明与定义一体
register声明的变量(寄存器变量)在程序中使用频率较高,只适于自动变量及函数的形式参数
对于外部变量和静态变量来说,初始化表达式必须是常量表达式,且只初始化一次;对于自动变量(未加属性说明的局部变量)和寄存器变量,则每次进入函数或程序块时都将被初始化。在不进行显示初始化的情况下,外部变量和静态变量都将被初始化为0,而自动变量和寄存器变量的初值则没有定义(初值为无用的信息)。