C全局变量的用法
extern的作用?
1.當extern與C一起連用時,extern "C" void fun(int a);則告訴編譯器編譯時按照C的規則去編譯函數名,若按照C++的規則編譯很可能名字改變了,因為C++支持函數的ch重載。
2.當extern不與C一起修飾變量或函數時,如在頭文件定義 extern char ?g_Char;此時就是聲明函數或全局變量的作用范圍,extern類型聲明和定義是要分開的,在頭文件進行聲明,在本模塊中進行定義,若有其他模塊使用g_Char,只需要引用頭文件就可以,它會在連接時從定義的模塊的目標代碼中找到引用的變量。
3.有人習慣將全局變量的聲明和定義放在一起,這樣放在忘記了定義,extern char g_Char = 'g';這個時候相當于沒有extern,然后把定義模塊的定義去掉,當編譯時若兩個以上的地方都引用了定義全局變量的頭文件則連接器在連接時發現li兩個g_Char而出錯誤,若果非要在頭文件去定義全局變量的話,那么就在其他模塊引用時將#include頭文件去掉,在其他模塊添加extern char g_Char,本模塊不用extern去修,這個時候編譯器就知道g_Char時引自外部的編譯模塊了,不會在本模塊再重復定義一個出來了,這樣會有個弊端就是其他模塊每每使用一個全局變量或函數都要用extern做修飾,頭文件的作用就是給外部提供接口使用,所以只在頭文件做聲明就可以了。
4.用static修飾全局變量:extern 和 static不能同時修飾一個變量,其次static 修飾全局變量時,同時也被定義了,static修飾全局變量的作用域智能是本身編譯單元,也就是說它的全局只對本編譯單元有效。所以一般定義static全局變量時,都把它放在源文件中而不是頭文件,這樣就不會給其他模塊造成不必要的信息污染。
5.const :const修飾的全局常量具有跟static相同的特性,即只能作用于本編譯模塊中,但const 可以與extern連用來聲明該常量可用于作用于其他編譯模塊中。
本文引自https://www.cnblogs.com/wujing-hubei/p/5944672.html
?
總結:全局變量聲明在.h文件,定義在本模塊.c文件,其他模塊則引入.h文件就可以直接引用。
總結
- 上一篇: 深度学习(四十五)——Stack GAN
- 下一篇: 黑洞成像