extern、static
1. 基本解釋:extern可以置于變量或者函數前,以標示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。此外extern也可用來進行鏈接指定。
????? 也就是說extern有兩個作用,第一個,當它與"C"一起連用時,如: extern "C" void fun(int a, int b);則告訴編譯器在編譯fun這個函數名時按著C的規則去翻譯相應的函數名而不是C++的,C++的規則在翻譯這個函數名時會把fun這個名字變得面目全非,可能是fun@aBc_int_int#%$也可能是別的,這要看編譯器的"脾氣"了(不同的編譯器采用的方法不一樣),為什么這么做呢,因為C++支持函數的重載啊,在這里不去過多的論述這個問題,如果你有興趣可以去網上搜索,相信你可以得到滿意的解釋!
??? 第二,當extern不與"C"在一起修飾變量或函數時,如在頭文件中: extern int g_Int;?它的作用就是聲明函數或全局變量的作用范圍的關鍵字,其聲明的函數和變量可以在本模塊活其他模塊中使用,記住它是一個聲明不是定義!也就是說B模塊(編譯單元)要是引用模塊(編譯單元)A中定義的全局變量或函數時,它只要包含A模塊的頭文件即可,在編譯階段,模塊B雖然找不到該函數或變量,但它不會報錯,它會在連接時從模塊A生成的目標代碼中找到此函數。
2. static int g_Int在文件前修飾變量指該變量作用域僅作用于本文件;在函數體內修飾變量,指該變量作用域為整個文件,函數運行完也不會消毀變量;而在類中,則表示變量是屬于全部實例化對象所共有的,必需初始化,且初始化必需在類外,不受類訪問控制符限定;
轉載于:https://www.cnblogs.com/flowingwind/p/8304887.html
總結
以上是生活随笔為你收集整理的extern、static的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hbase安装部署
- 下一篇: HALCON示例程序measure_ch