stm32全域性變數的定義和宣告
這裡要注意變數定義和變數宣告的區別:
變數定義使用「資料型別+變數名稱」的形式,編譯器需要給它分配記憶體單元的;
而變數宣告使用「extern 變數型別+變數名稱」的形式,是告訴編譯器我這個變數將在其他外部c檔案中定義,我這裡只是在外部用它。編譯器就不會給它分配記憶體空間,而等到真正遇到變數定義時再給它分配記憶體空間。
//以下是「聚海」de帖子///
1、普通變數定義成全域性變數
如果是普通型別,完全可以不用*.**件,直接在*.c檔案中定義,在呼叫檔案處用extern 宣告,因為對於普通型別,編譯器是可以識別的。比如在乙個 my.c檔案中,我定義了char name[10];那麼在別的檔案中只要用extern char name(由於是宣告,一位陣列可以省略大小,但不建議用指標,比較指標和陣列是兩回事)外部宣告就可以了,告訴編譯器這個變數我已經定義過了,具體怎樣,你慢慢找吧。這符合常理,因為char是編譯器能自主識別的型別。
2、自定義結構體型別定義成全域性變數
不同於普通型別,如果不預先通知編譯器,編譯器是不會識別你自定義的型別的。這個時候,.**件便出現了。不是定義結構型別不佔記憶體嗎?那好,我大結構體的定義放在.**件中,這樣一來,無論你incude無數次,記憶體都不會被占用的。而且這樣還有個好處,在別的檔案中可以include這個*.**件,這樣,在這個檔案中,編譯器就可以識別你的自定義型別了,目的不就達到了? 假如我在global.h中定義了
typedef struct _position
position;
那麼我可以在乙個global.c檔案中實現全域性變數的定義,不過要include那個*.**件,比如
include 「global.h」
position current,;
這樣就定義了cunrrent這個變數,在別的檔案中引用這個變數時,只要extern position current;進行宣告,然後就可以用了,不過這個檔案也還得include 「global.h」 因為如果不包含,在這個檔案中是不識別position型別的。
1.如何引用乙個已經定義過的全域性變數?
答:extern 可以用引用標頭檔案的方式,也可以用extern關鍵字,如果用引用標頭檔案方式來引用某個在標頭檔案中宣告的全域性變理,假定你將那個編寫錯了,那麼在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那麼在編譯期間不會報錯,而在連線期間報錯。
2.全域性變數可不可以定義在可被多個.c檔案中?為什麼?
答:可以,在不同的c檔案中以static形式來宣告同名全域性變數。 可以在不同的c檔案中宣告同名的全域性變數,前提是其中只能有乙個c檔案中對此變數賦初值,此時連線不會出錯。
over!
C 全域性變數的定義和宣告
本篇文章是對c 全域性變數的宣告與定義進行了詳細的分析介紹,1 宣告與定義 函式或變數在宣告時,並沒有給它實際的物理記憶體空間,它有時候可保證你的程式 編譯通過 函式或變數在定義時,它就在記憶體中有了實際的物理空間。基本型別變數的宣告和定義 初始化 是同時產生的 而對於物件來說,宣告和定義是分開的。...
全域性變數定義和聲名
全域性變數一般這樣定義 1。在一類的.cpp中定義 int myint 然後再在要用到的地方的.cpp裡extern int myint 這樣就可以用了。或在對應用h標頭檔案中宣告,在使用它的任何乙個地方都可以 include它的h標頭檔案 2。在stdafx.cpp中加入 int myint 然後...
全域性變數的定義宣告
c 中定義全域性變數要注意的地方 yandaren 1220 chinaunix部落格 c 中定義全域性變數要注意的地方 在c 中定義全域性變數是應該盡量在.cpp檔案中定義,而不要在.h 檔案中 定義,定義好了之後,可以在.件中利用 extern關鍵字進行 宣告.如果在.件中定義的話,多層包含可能...