一、靜態全局變量(又稱全局靜態變量):
(1) 靜態全局變量的定義:在全局變量前加一個static,使該變量只在這個源文件中可用。
(2)全局變量與全局靜態變量的區別:
(a)若程序由一個源文件構成時,全局變量與全局靜態變量沒有區別。
(b)若程序由多個源文件構成時,全局變量與全局靜態變量不一樣:全局靜態變量使得該變量成爲定義該變量的源文件所獨享,即:全局靜態變量對組成該程序的其它源文件是無效的。
(3)靜態全局變量的做用:
(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
# include <iostream.h>
static int n; // 默認初始化爲0,注意此處定義的n 只能在file2.cpp中使用。
void fn()
{
n++;
cout < <n < <endl;
}
二、靜態函數:使某個函數只在一個源文件中有效,不能被其餘源文件所用。
定義:在函數前面加上static。
說明:函數的聲明和定義默認狀況下在整個程序中是extern的。
靜態函數的效果:
(1)它允其餘源文件創建並使用同名的函數,而不相互衝突。
(2) 聲明爲靜態的函數不能被其餘源文件所調用,由於它的名字不能獲得。ios