1. 程式人生 > >c語言中靜態全域性變數、靜態區域性變數、全域性變數、區域性變數、巨集

c語言中靜態全域性變數、靜態區域性變數、全域性變數、區域性變數、巨集

全域性變數:

全域性變數具有全域性作用域。,它只編譯期被始化一次,它不能用變數來初始化。全域性變數只需要在一個原始檔中定義,就可以作用於所有的原始檔。在其他不包含全域性變數定義的原始檔中需要用extern關鍵詞來再次宣告這個全域性變數

區域性變數:

區域性變數只有區域性作用域,它只在函式呼叫執行期間存在,函式一次呼叫執行結束後,變數被撤銷,其所佔用的的記憶體也被回收。

靜態全域性變數:

靜態全域性變數具有全域性作用域,,它只編譯期被始化一次,它不能用變數來初始化。它作用於定義它的檔案裡,不能作用到其它的檔案裡。這樣即使多個不同的原始檔定義了同名的靜態全域性變數,他們也是不同的變數。

靜態區域性變數:

靜態區域性變數只有區域性作用域,它只編譯期被始化一次,它不能用變數來初始化。在它初始化之後便一直存在,直到程式執行結束。它與全域性變數的區別是:全域性變數是對所有的函式是可見的,而靜態區域性變數只對定義自己的函式體始終可見。

巨集:

巨集定義又稱為巨集代換、巨集替換,簡稱“巨集”。在預編譯(即巨集展開)階段使用具體的內容替換巨集名,預編譯過程是不做語法檢查的,這樣導致在巨集在程式中出錯不好判斷。 巨集與變數的區別: 1. 巨集定義不分配記憶體,變數定義需要分配記憶體 2. 巨集不分資料型別,變數區分資料型別。 3. 巨集定義之後值是不能改變的,變數的值是可以改變的 巨集與const常變數的區別: 1. 巨集系統不為它分配記憶體,const定義的常量系統為它分配記憶體 2. 巨集在預編譯階段直接進行替換過,不進行資料型別及語法的檢驗, const定義的常量在編譯時進行嚴格的型別和語法檢驗,可以避免出錯。

分配記憶體空間:

分配記憶體空間:

區域性變數分配在棧空間;

全域性變數、靜態變數都分配在靜態儲存區;

巨集不分配記憶體空間