extern就是告訴編譯器,這個變數或者函式在別的檔案已經定義過,我在這裡只是引用一下
檔案a.c
static int i; //只在a檔案中用
int j; //在工程裡用
static void init() //只在a檔案中用
void callme() //在工程中用
上面的全域性i變數和init()函式只能用在a.c檔案中,全域性變數sum的作用域只在callme裡。變數j和函式callme()的全侷限擴充到整個工程檔案。所以可以在下面的b.c中用extern關鍵字呼叫。extern告訴編譯器這個變數或者函式在其他檔案裡已經被定義了。
檔案b.c
extern int j; //呼叫a檔案裡的
extern void callme(); //呼叫a檔案裡的
int main()
extern的另外用法是當c和c++混合程式設計時如果c++呼叫的是c原始檔定義的函式或者變數,那麼要加extern來告訴編譯器用c方式命名函式:
檔案a.cpp呼叫a.c裡面的變數i和函式callme()
extern "c" //在c++檔案裡呼叫c檔案中的變數
int main()
二,static法則:
a、若全域性變數僅在單個c檔案中訪問,則可以將這個變數修改為靜態全域性變數,以降低模組間的耦合度;
b、若全域性變數僅由單個函式訪問,則可以將這個變數改為該函式的靜態區域性變數,以降低模組間的耦合度;
c、設計和使用訪問動態全域性變數、靜態全域性變數、靜態區域性變數的函式時,需要考慮重入問題;
原 static和extern清晰解說
extern就是告訴編譯器,這個變數或者函式在別的檔案已經定義過,我在這裡只是引用一下 檔案a.c static int i 只在a檔案中用 int j 在工程裡用 static void init 只在a檔案中用 void callme 在工程中用 上面的全域性i變數和init 函式只能用在a.c...
static和extern的區別
static 一 在c中,static主要定義全域性靜態變數 定義區域性靜態變數 定義靜態函式。1 定義全域性靜態變數 在全域性變數前面加上關鍵字static,該全域性變數變成了全域性靜態變數。全域性靜態變數有以下特點。a.在全域性區分配記憶體。b.如果沒有初始化,其預設值為0.c.該變數在本檔案內...
static和extern的區別
static 一 在c中,static主要定義全域性靜態變數 定義區域性靜態變數 定義靜態函式。1 定義全域性靜態變數 在全域性變數前面加上關鍵字static,該全域性變數變成了全域性靜態變數。全域性靜態變數有以下特點。a.在全域性區分配記憶體。b.如果沒有初始化,其預設值為0.c.該變數在本檔案內...