C++为静态持续存储持续性变量提供了3种链接性:外部链接(可在其他文件中访问)、内部链接(只能在当前文件中访问)和无链接性(只能在当前函数或代码块中访问)。
1 ... 2 int globle = 100; //静态持续性变量,具有外部链接性 3 static int one_file = 50; //静态持续性变量,具有内部链接性 4 int main() 5 { 6 ... 7 } 8 void func1(int n) 9 { 10 static int count = 0; //静态持续性变量,不具有链接性 11 }
如果要在多个文件中使用外部变量,只需要在一个文件中包含该变量的定义,但在使用该变量的其他文件中,都必须使用关键字extern声明它:
//file01.cpp extern int cats = 20; //definition because of initialization int dogs = 22; //also a definition int fleas; //also a definition ... //file02.cpp extern int cats; //not definition because they use extern int dogs; //extern and have no initialization ... //file98.cpp extern int cats; extern int dogs; extern int fleas; ...
无链接性的局部变量将static限定符用于在代码块中定义,在代码块中使用static时,导致它在该代码块不处于活动状态时仍然存在。因此在两次函数调用之间,静态局部变量的值将保持不变。另外,如果初始化了静态局部变量,则程序只在启动时进行一次初始化。以后再调用函数时,将不会像自动变量那样再次被初始化。