关于之前比较迷惑的static和作用域问题的一点总结。
static int n; // file scoped ariable
float f; // global variable
int main()
{
double d; // local variable
}
变量f的范围可以说是global也可以说超出了所在文件。每个变量都有一个连接属性,用于在连接时判断其他文件是否有权利指向这个变量。这里的f声明,c++默认给它了一个连接属性:extern,也就是说在其他文件中,可以使用这个变量,当然前提是你包含了此文件,或者在一个工程里面(因为它是连接属性)。对于变量n,前面的static导致这个变量的连接属性为:此文件,就是说外部文件无法使用它。
static之所以引起混淆,是因为一开始学的时候,它的应用在于把上面这个d,这个局部变量变的固定。讲到static必然有个例子,是在函数中有个局部变量,然后声明为static,接着自增,之后神奇的发现变量居然没有自动释放。这其实还是个局部变量,出了函数是没法使用的。
对于extern,常用的做法还有:
extern int array[];
这样在头文件里面声明一个数组类型,然后在cpp中定义它。