防止全域性變數重複定義

2021-06-23 06:10:23 字數 625 閱讀 6151

問題:

在.h檔案中定義了全域性變數

並用

#ifndef identifier_h

#define identifier_h

....

#endif

但是依然出現重複定義問題

分析:ifndef這套條件編譯是為了防止同乙個.c檔案中包含多個相同.h檔案的(比如有乙個.c檔案包含了a.h,a.h又包含了b.h,那麼當你在這個.c檔案中同時包含了a.h和b.h時,因為有上面的條件編譯的關係而不會出錯)。因為編譯器在編譯的時候是按照.c檔案為單位編譯的,每個.c檔案編譯成.o檔案(linux系統)或者.obj(windows系統),然後再將這些.o檔案鏈結起來,最後與執行庫鏈結形成可執行檔案(elf或exe檔案)。你在兩個.c檔案中包含了同乙個.h檔案。這根本和條件編譯沒什麼關係。你在.h檔案中定義了全域性變數a, b, c。那麼就表示你兩個.c檔案中,每個.c檔案中都有這樣的全域性變數定義:int a, b, c;當每個.c檔案單獨編譯當然沒有問題,但是當它們鏈結起來的時候就出現問題了:兩個.c檔案中都有變數a b c,所以當然是重複定義啊。問題是出在鏈結的時候的。

解決方案:

在標頭檔案中宣告時 加入extern

在使用的檔案中定義變數 不需要加extern

定義全域性變數

inte ce property strong,nonatomic uiwindow window propertyboolislogin end synthesize window window synthesizeislogin end 那麼在其他的class裡,則可以通過下列 呼叫全域性變數 ...

vue定義全域性變數

在開發中,有時需要將從介面請求到的一些資料當做全域性變數,在其他頁面多次使用。比如,登入成功後可能需要將使用者名稱,id等資訊存起來,便於其他頁面展示或使用,將這些資訊定義為全域性變數是用起來就很方便。舉栗子 在login.vue中拿到了使用者的一些資訊 import vue from vue 注意...

C定義全域性變數

程式工程中往往遇到這樣的問題 某個變數是貫穿始終的,主函式以及不同的子函式都要用到這個變數,並且要呼叫子函式改變變數的值。這時候全域性變數就起到乙個橋梁作用,在函式外定義,在主函式中呼叫定義,在子函式a中呼叫並賦值,在子函式b中呼叫該變數,此時的值已經是改變之後的值。用法 在主函式之前定義全域性變數...