例子:
標頭檔案:state.h
原始檔:state.cpp
其它原始檔:t1.cpp
t2.cpp t3.cpp, 這些原始檔都包含標頭檔案state.h。
需要定義乙個全域性變數供這些原始檔中使用:方法如下
1、在 state.h宣告全域性變數: extern int a;
2、在state.cpp中定義該全域性變數:int a = 10;
這樣其它原始檔就可以使用該變數啦
這裡需要的是「宣告」,不是「定義」!根據c++標準的規定,乙個變數宣告必須同時滿足兩個條件,否則就是定義:
(1)宣告必須使用extern關鍵字;(2)不能給變數賦初值
extern
int
a; //宣告
int
a; //定義
int
a =
0; //定義
extern
int
a =0;
//定義
標頭檔案中應使用extern 關鍵字宣告全域性變數(不定義),如果這個變數有多個檔案用到,可以新建乙個cpp,在其中定義,把這個cpp加入工程即可。標頭檔案請不要定義任何變數,那是非常業餘的行為……
一般在標頭檔案中申明,用extern, 在cpp中定義。 如果在標頭檔案中定義,如果這個標頭檔案被多個cpp引用,會造成重複定義的鏈結錯誤。
標頭檔案只能申明全域性變數(extern),不可定義(不推薦使用)
.cpp裡,在最外層定義即可(int gi),直接引用
如果在.cpp裡使用static定義,則該變數只在當前cpp檔案中有效,在別的檔案中無效
在.h裡使用static定義,不會進行編譯(.h檔案不編譯),只會在其每個include的cpp檔案中包含編譯,相當於在.cpp裡使用static 定義。
C 多個檔案共用乙個全域性變數
關鍵解決點是使用extern,還有就是理解c 宣告 定義 賦值。宣告是告訴程式,這個地方有個變數,定義是為變數開闢空間,賦值是開闢空間後給值 例如下面這個a.cpp程式 include myhead.h include int main 我明明沒有定義a,為什麼沒有報錯呢?原因在於我引入了我自定義的...
c 多個檔案中共用乙個全域性變數 變數跨檔案使用
雖然很多部落格都寫過這個了 但是 我還是繼續補充的詳細一點吧 畢竟很多人新手的程式是我們寫部落格的人難以想象不是嗎 想要跨檔案使用 肯定是要用到 extern宣告變數了 不懂自己查 舉個例子 標頭檔案 source.h 原始檔 source.cpp 其它原始檔 t1.cpp t2.cpp t3.cp...
使用乙個全域性變數
然而,有區域性變數同名的全域性變數通常是製造麻煩,並應盡可能避免。使用匈牙利表示法,它是常見的全域性變數 g 字首。這是區分全域性變數與區域性變數的一種簡單的方式,避免了由於被隱藏變數命名衝突。新的程式設計師經常使用全域性變數很多,因為他們是容易的工作,特別是當涉及到許多功能。然而,這是乙個非常糟糕...