static extern 在大工程中的運用

2021-08-23 14:50:00 字數 916 閱讀 1164

一,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 它始終在全域性靜態區,直到...