關(guān)于之前比較迷惑的static和作用域問題的一點(diǎn)總結(jié)。
static int n; // file scoped ariable
float f; // global variable
int main()
{
double d; // local variable
}
變量f的范圍可以說是global也可以說超出了所在文件。每個(gè)變量都有一個(gè)連接屬性,用于在連接時(shí)判斷其他文件是否有權(quán)利指向這個(gè)變量。這里的f聲明,c++默認(rèn)給它了一個(gè)連接屬性:extern,也就是說在其他文件中,可以使用這個(gè)變量,當(dāng)然前提是你包含了此文件,或者在一個(gè)工程里面(因?yàn)樗沁B接屬性)。對于變量n,前面的static導(dǎo)致這個(gè)變量的連接屬性為:此文件,就是說外部文件無法使用它。
static之所以引起混淆,是因?yàn)橐婚_始學(xué)的時(shí)候,它的應(yīng)用在于把上面這個(gè)d,這個(gè)局部變量變的固定。講到static必然有個(gè)例子,是在函數(shù)中有個(gè)局部變量,然后聲明為static,接著自增,之后神奇的發(fā)現(xiàn)變量居然沒有自動(dòng)釋放。這其實(shí)還是個(gè)局部變量,出了函數(shù)是沒法使用的。
對于extern,常用的做法還有:
extern int array[];
這樣在頭文件里面聲明一個(gè)數(shù)組類型,然后在cpp中定義它。