c 多個原始檔共用乙個全域性變數(e

2021-08-03 04:41:09 字數 915 閱讀 1012

例子:

標頭檔案: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 字首。這是區分全域性變數與區域性變數的一種簡單的方式,避免了由於被隱藏變數命名衝突。新的程式設計師經常使用全域性變數很多,因為他們是容易的工作,特別是當涉及到許多功能。然而,這是乙個非常糟糕...