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