c 全域性變數 靜態全域性變數

2022-08-12 01:15:12 字數 981 閱讀 4090

全域性變數是靜態儲存方式, 靜態全域性變數也是靜態儲存方式,這兩者在儲存方式上並無不同。

區別:雖在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,靜態全域性變數在各個原始檔中都是有效的。

靜態區域性變數則限制了其作用域, 只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能使用它。由於靜態區域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用,因此可以避免在其它原始檔中引起錯誤。

///

a.h#ifndef a_h_include

#define a_h_include

extern

inta;

intb;

#endif

//a_h_include

///

a.cpp

int a = 10

;///

main.cpp

#include #include

"a.h

"using

namespace std;

///

main.cpp

#include #include

"a.h

"using

namespace

std;

intmain()

編譯成功,輸出 10 

在a.cpp中,用static修飾a

編譯無法通過

undefined reference to `a'  -----> 未定義對「 a」的引用

可以看出被static修飾的全域性變數,的作用域只在原始檔的範圍

而非靜態全域性變數,則可以整個源程式檔案中使用

推薦一篇部落格:

寫的很好

全域性變數和靜態全域性變數

全域性變數和區域性變數是從變數的作用域的角度劃分。靜態變數和動態變數是從變數的記憶體分配的角度劃分。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同,區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原...

C 全域性變數 靜態全域性變數 靜態區域性變數

全域性變數儲存在靜態儲存區,其作用域是全域性作用域,生命週期是整個程式的生命週期。具體而言,在乙個檔案中定義乙個全域性變數,在程式的其它檔案中可以通過extern關鍵字再次宣告說明該變數已經定義。靜態全域性變數儲存在靜態儲存區,其作用域只能是定義該變數的檔案,生命週期是整個程式的生命週期。靜態區域性...

C 靜態全域性變數與普通全域性變數

一 儲存區域 1 棧 由編譯器在需要的時候分配,在不需要的時候自動清除的變數的儲存區域。通常儲存區域性變數,函式引數。2 堆 由new分配的記憶體塊,需要手動釋放。如果程式設計師沒有手動釋放,在程式執行結束後,作業系統自動 3 自由儲存區 由malloc等分配的記憶體塊,與堆相似,用free來釋放。...