一,static和extern:
大工程下我們會碰到很多原始檔。
檔案a.c
static int i; //只在a檔案中用
int j; //在工程裡用
static void init() //只在a檔案中用
void callme() //在工程中用
上面的全域性i變數和init()函式只能用在a.c檔案中,全域性變數sum的作用域只在callme裡。變數j和函式callme()的全侷限擴充到整個工程檔案。所以可以在下面的b.c中用extern關鍵字呼叫。extern告訴編譯器這個變數或者函式在其他檔案裡已經被定義了。
檔案b.c
extern int j; //呼叫a檔案裡的
extern void callme(); //呼叫a檔案裡的
int main()
extern的另外用法是當c和c++混合程式設計時如果c++呼叫的是c原始檔定義的函式或者變數,那麼要加extern來告訴編譯器用c方式命名函式:
檔案a.cpp呼叫a.c裡面的變數i和函式callme()
extern "c" //在c++檔案裡呼叫c檔案中的變數
int main()
二,static法則:
a、若全域性變數僅在單個c檔案中訪問,則可以將這個變數修改為靜態全域性變數,以降低模組間的耦合度;
b、若全域性變數僅由單個函式訪問,則可以將這個變數改為該函式的靜態區域性變數,以降低模組間的耦合度;
c、設計和使用訪問動態全域性變數、靜態全域性變數、靜態區域性變數的函式時,需要考慮重入問題;
static extern分析總結
一 c語言記憶體空間布局 下面是google上找的一張c記憶體布局圖,我先基於這張圖介紹下各個記憶體區域的情況 1 正文 段 每個程式開始前,都有系統載入 指令到這裡,用於執行,當然都是機器碼 2 初始化的資料段 存放已經初始化的非自動變數,如全域性變數int i 0 等等 3 未初始化的資料段 b...
看書雜記 static extern
一 函式中的區域性變數都是動態分配儲存空間的,資料儲存在動態儲存區中,函式呼叫結束後即消失,釋放儲存空間。若是希望函式中的區域性變數在呼叫結束後仍保留原值,也不釋放儲存單元,則可使用關鍵字static宣告區域性變數是靜態變數。函式編譯時在靜態儲存區分配儲存單元,函式呼叫結束後不釋放儲存單元,直到程式...
static,extern詳細用法
static c語言 static 的作用 1 全域性靜態變數 1 在全域性靜態區分配記憶體 2 如果沒有初始化,其預設值是0 3改變量在本檔案內從定義開始到檔案結束可見 2 區域性靜態變數 1 改變量在全域性靜態區分配記憶體 2 如果不顯示初始化,那麼將被初始化為0 3 它始終在全域性靜態區,直到...