天天看點

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

(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檔案中。 

我想這是最主要的差別。   

繼續閱讀