使用乙個全域性變數

2021-06-21 04:53:42 字數 988 閱讀 9964

然而,有區域性變數同名的全域性變數通常是製造麻煩,並應盡可能避免。使用匈牙利表示法,它是常見的全域性變數「g_」字首。這是區分全域性變數與區域性變數的一種簡單的方式,避免了由於被隱藏變數命名衝突。

新的程式設計師經常使用全域性變數很多,因為他們是容易的工作,特別是當涉及到許多功能。然而,這是乙個非常糟糕的主意。事實上,一般應完全避免全域性變數!

為什麼全域性變數是**的

應該避免全域性變數,有幾個原因,但最主要的原因是因為他們增加你的程式的複雜性非常。例如,說你檢查乙個程式,你想知道乙個變數命名g_nvalue用於。因為g_nvalue是全球性的,和全域性變數可以用在整個程式的任何地方,你必須檢查每乙個檔案的每一行!在乙個檔案和數以百萬計的**行的電腦程式,你可以想象這會花多少時間!

第二,全域性變數是危險的因為它們的值可以是任何功能,被稱為改變,也為程式設計師知道這會發生,沒有簡單的方法。考慮下面的程式

注意,程式集g_nmode 1,然後叫()。除非程式設計師有顯性知識()會改變g_nmode價值,他或她可能並不希望()的值改變!因此,對main()不工作,其餘的如程式設計器期望(和世界毀滅)。

全域性變數,使每個函式呼叫的潛在的危險,和程式設計師沒有容易的方式,了解哪些是危險的,哪些是不!區域性變數是安全得多,因為其他函式不能直接影響他們。因此,全域性變數不能除非有很好的理由使用!

我真的不認為我最後一次使用乙個全域性變數。

通常,人們使用全域性變數的三個理由之一:

1)因為他們不理解c++變數傳遞力學,或他們是懶惰。

2)認為需要整個程式使用的資料(如配置設定)。

3)之間傳遞資料的**,沒有乙個主/被叫方的關係(例如,多執行緒程式)

顯然# 1不是乙個很好的理由在所有。一旦你到c++類,還有更好的方式去做# 2(如靜態類)。相當多的葉子# 3,也許一些其他情況下,我不知道。

基本上,只有當你要使用乙個全域性變數是沒有實際的方式來做你想做的是使用區域性變數和變數傳遞力學。在我看來,使用全域性變數應該是最後的手段,在某種程度上,這是乙個「你知道當你遇到它」的情況,因為根本不會被任何其他合理的方式進行。

static全域性變數 全域性變數

1 全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是...

C 多個檔案共用乙個全域性變數

關鍵解決點是使用extern,還有就是理解c 宣告 定義 賦值。宣告是告訴程式,這個地方有個變數,定義是為變數開闢空間,賦值是開闢空間後給值 例如下面這個a.cpp程式 include myhead.h include int main 我明明沒有定義a,為什麼沒有報錯呢?原因在於我引入了我自定義的...

乙個全域性變數引起的DLL崩潰

現象是exe程式在載入dll的時候崩潰了,莫名其妙的崩潰了。換其它dll沒問題,我又寫了個demo程式使用這個dll也是乙個現象,用od載入exe,用oddllloader載入dll,結果也是一樣的崩。搞的我也差點崩潰了。載入上微軟符號表後發現 法個克,這個問題找了很長時間。我一直認為是專案配置錯誤...