全域性變數的另一種思路

2021-07-04 16:24:25 字數 773 閱讀 6039

為了程式的可讀性和邏輯性,有時候喜歡用單獨的.h檔案定義所有的全域性變數。

有時候我們會想,在grobalpar.h中定義所有的全域性變數,然後其他cpp檔案#include 「grobalpar.h」就ok了,這種想法大錯特錯!

這樣做會出現重複定義的錯誤(提示很多很多變數都重複定義),如下:

注意:1、只要兩個或者以上的.cpp同時包含了乙個定義了變數的.h檔案,就會提示錯誤;

2、假定乙個定義了變數的1.h檔案,有1.cpp和2.cpp,1.cpp包含1.h, 2.cpp只包含2.h 

但是2.h包含了1.h,所以1.h中定義的變數編譯的時候會在2.pp中有定義。於是乎2.cpp翻譯成的obj裡也會有定義,結果導致提示obj裡重定義。

但是我們可以這樣實現:

1、在grobalpar.h中定義所有的全域性變數;

2、建立grobalpar_extern.h檔案,將grobalpar.h的所有變數都extern一下,存入grobalpar_extern.h檔案;

3、在要呼叫的地方 #include "grobalpar_extern.h",這樣就不會出現多次編譯/重複定義的問題了;

4、注意:main所在的檔案中要 #include "grobalpar.h" 檔案,而不是 #include "grobalpar_extern.h"。

也可參見:

選擇排序的另一種思路

在我們上次的選擇迴圈中,我們用了乙個minindex變數來儲存最小值的下標,每次迴圈完畢後用最小值下標的元素與手元素進行交換,遍歷一次,記錄下最值元素所在位置,遍歷結束後,將此最值元素調整到合適的位置。但是我們還有種交換變數的方式,我們可以用待排序陣列中的元素與待排序序列中的首元素比較,如果比待排序...

詳解KMP演算法 另一種思路

這個演算法單純從 理解起來比較費勁.我覺得從思路上理解是非常簡單的.傳統演算法的劣勢很容易察覺.那就是會有重複的匹配過程.我們假定 text為待查文字,pattern 為匹配串.text aaaab pattern ab 按以下傳統演算法.則直到迴圈到最後一次比較.才找到 ab 而前面很多迴圈都是做...

磁磚樣式 另一種思路的dfs

基本的dfs搜尋一般都是直接從乙個點出發,再從這個點到下乙個 但是這題使用了另一種思路的dfs 每次選擇點不是根據上乙個點來推進,而是從整個地圖中選擇沒有選過的點 也就是掃瞄一遍地圖,從中選擇還沒有使用過的點,這種方式往往用於兩個點之間的轉移規則比較複雜的情況,比如這題,每次需要使用兩個點,而不是乙...