C 全域性變數的編譯 鏈結 使用

2022-10-09 20:36:16 字數 999 閱讀 5103

全域性變數,在.**件宣告。

1、加extern,別的檔案可以使用,.cpp可以使用,其它包含此標頭檔案的都可以使用。但如果超過2個檔案包含此標頭檔案,會有重複定義的鏈結錯誤。

可以使用 namespace 來解決,匿名namespace相當於編譯為此obj生成了 隨機的作用域名稱,多個檔案包含,也就形成了多個隨機作用域,所以一般不建議使用匿名namespace。

2、不加extern,只有.h可以使用,本檔案的.cpp也不可以使用。

雖然不可使用,但依舊可以多檔案包含此標頭檔案,但是包含後,就是多作用域,也就是多個隨機作用域名稱。a.cpp包含,就是隨機作用域a,b.cpp包含就是隨機作用域b。操作時,各用個的。

多包含,依然可以使用 namespace 來解決重複定義的問題。

全域性變數使用總結:

1、正確的使用方式:.h中實名namespace+extern宣告,對應.cpp中帶型別的 變數定義,可初始化,也可不初始化;

2、.h中直接宣告,不定義,不加namespace,不加extern,.cpp中直接不認識此變數,編譯錯誤。因為 不加extern宣告,只限制在本檔案可用。

3、.h中直接宣告+定義,(有初始化就代表定義),單個檔案包含沒有問題,可以使用。多包含時,重複定義的鏈結錯誤。

4、.h中使用匿名namasapce,隨機作用域,單個檔案包含沒有問題,因為就乙個作用域在使用。多檔案包含,會在有多份定義在多個作用域中。使用錯誤,很難查出錯誤。

5、.h中使用實名namespace,不使用extern,多個檔案包含,依然有重複定義的鏈結錯誤;

6、.h中,實名namespace,不使用extren,只宣告,不定義,在對應.cpp中定義變數時,會有 編譯錯誤:重定義;

簡單總結:

多檔案使用變數,請使用實名namespace+extern宣告+定義;

c 全域性變數的使用

昨天看了新泰科技的筆試題。第乙個感覺.下屆的基礎太差。然後發現乙個有趣的題 c 全域性變數在其他的cpp檔案中怎麼使用?我的第一感覺是直接使用。不過感覺加 include 和 這樣回答更好,順便問了下同寢的人。發現完全不同的答案,他說要使用每乙個cpp裡都要加extern.我倆僵持不下,於是開啟vs...

c 全域性變數的使用

在c 中定義全域性變數是應該盡量在.cpp檔案中定義,而不要在.h 檔案中 定義,定義好了之後,可以在.h檔案中利用 extern關鍵字進行 宣告.如果在.h檔案中定義的話,多層包含可能會引起重複定義的錯誤.下面是乙個示例 在base.cpp中定義全域性變數 base.cpp int g maxti...

C 全域性變數的使用

c 全域性變數的使用 c 應用程式中.使用者登陸後.比如要把使用者名稱,使用者等級,使用者ip位址等等記錄到變數中.我們需要使用到全域性變數.就跟asp 中登陸後使用session,cookie的原理是一樣的.有一種方式總可能會記錄下使用者登陸的資訊,c 中用到的是自定義乙個類.其中定義靜態變數來實...