天天看點

全局變量與全局靜态變量的差別

(a)若程式由一個源檔案構成時,全局變量與全局靜态變量沒有差別。

(b)若程式由多個源檔案構成時,全局變量與全局靜态變量不同:全局靜态變量使得該變量成為定義該變量的源檔案所獨享,即:全局靜态變量對組成該程式的其它源檔案是無效的。

靜态全局變量的作用:

(a)不必擔心其它源檔案使用相同變量名,彼此互相獨立。

(b)在某源檔案中定義的靜态全局變量不能被其他源檔案使用或修改。

例如:一個程式由兩個源檔案組成,其中在一個源檔案中定義了“int n;”,在另一個源檔案中定義了“static int n;”則程式給它們分别配置設定了不同的空間,兩個值互不幹擾。

例如:下面在file1.cpp中聲明全局變量n,在file2.cpp中定義全局靜态變量n。檔案file1.cpp和file2.cpp單獨編譯都能通過,但連接配接時,file1.cpp中的變量n找不到定義,産生連接配接錯誤。

// file1.cpp

# include <iostream.h>

void fn()

extern int n;

void main()

{

n=20;

cout<<n<<endl;

fn();

}

// file2.cpp

static int n; // 預設初始化為0,注意此處定義的n 隻能在file2.cpp中使用。

n++;

靜态函數:使某個函數隻在一個源檔案中有效,不能被其他源檔案所用。

定義:在函數前面加上static。

說明:函數的聲明和定義預設情況下在整個程式中是extern的。

(1)它允其他源檔案建立并使用同名的函數,而不互相沖突。

(2) 聲明為靜态的函數不能被其他源檔案所調用,因為它的名字不能得到。   

拙見:

靜态變量和函數一般都局限于一個編譯單元也就是.cpp檔案中。

我想這是最主要的差別。   

下一篇: 當你老了

繼續閱讀