c++中的static和extern
看到一個大神寫的非常簡單明瞭的回答,特地轉載過來
連結:https://www.zhihu.com/question/265415085/answer/293495989
//是說這個變數是存在,但是不在(可能)當前的編譯單元,後續連結時會在哪裡發現 //大家共用這個全域性變數 //如果在連結的時候,沒有在任何地方發現這個變數的定義 //即沒有不帶 extern 的 int x,報連結錯誤 extern int x; //是說這個變數是存在,且只存在當前編譯單元,也可以叫它本地全域性變數。 //可能多個編譯單元都會有這個定義,比如這句寫在一個 header 檔案中 //多個 source 檔案 include 了這個 header 檔案 //那麼每個 source 檔案中都可以使用 x,但是每個 x 是獨立存在 //即在 a.cpp 的 x 就是 a_x,在 b.cpp 的 x 就是 b_x。相互不會影響。 static int x;
------ 如果需要一個全域性變數在多個原始檔中共用,用 extern
extern.h
extern int x;
然後在某一個原始檔中 externX.cpp,定義 x
#include "extern.h" //這個 include 不要也行
int x = 1;
------ 如果需要每個原始檔中單獨使用一個全域性變數,用 static
static.h
static int x;
然後在所有原始檔中 staticX.cpp,自由使用 x
#include "static.h"
//use x,只屬於每個 cpp 獨立的全域性變數 x