extern和static 的用法

2021-06-27 21:05:04 字數 1930 閱讀 8049

一 extern定義全域性變數的用法:

定義方式:

(1)在原始檔中定義:變數型別 變數名 = 變數初始化值;

宣告方式一:

(1)在定義該變數的類的標頭檔案中宣告該變數:extern 變數型別 變數名;

(2)在需要使用該變數的其他類中新增該類的標頭檔案。

宣告方式二:

(1)在需要使用該變數的其他類的標頭檔案中新增該類的標頭檔案,並新增該變數的宣告:extern 變數型別 變數名;

//class a 原始檔

#include

int m_value = 0;

int main()

m_value = 3;

return getvalue();

int getvalue()

return m_value;

//calss a標頭檔案

public:

int main();

int getvalue();

//calss b原始檔

include

int main()

m_value = 2;

return getvalue();

int getvalue()

return m_value;

//class b標頭檔案

include

extern int m_value;

int main();

int getvalue();

二 static定義靜態全域性變數的用法:

static 變數型別 變數名;

注意:靜態全域性變數在宣告它的整個檔案都是可見的,而在檔案之外是不可見的。

//calss a原始檔

include

static int  m_value;

int main()

//class b標頭檔案

include

extern int  m_value;

執行class b會報錯,因為m_value是靜態全域性變數,只可以應用於class a,如果把class a中變數的定義改為:int m_value; 就不會報錯了。

static定義靜態區域性變數:

在區域性變數前加上static,就是區域性靜態變數。

靜態區域性變數有以下特點:

(1)該變數在全域性資料區分配記憶體;

(2)靜態區域性變數在程式執行到該物件的宣告處時被首次初始化,即以後的函式呼叫不再進行初始化;

(3)靜態區域性變數一般在宣告處初始化,如果沒有顯式初始化,會被程式自動初始化為0;

(4)它始終駐留在全域性資料區,直到程式執行結束。但其作用域為區域性作用域,當定義它的函式或語句塊結束時,其作用域隨之結束;

例如://calss a

int main();

int a = getvalue();

int b = getvalue();

int c = getvalue();

return 0;

int getvalue()

static int m_value = 0;

m_value++;

return m_value;

最後值:

a = 1;

b = 2; 

c = 3;

有此處可以看出,靜態區域性變數的值在初次執行到該變數的宣告時初始化,此後不會再重新初始化。每次呼叫getvalue函式m_value的值都會在上次呼叫該函式的值的基礎上累加。

三 全域性變數和靜態全域性變數的區別:

1)全域性變數是不顯式用static修飾的全域性變數,全域性變數預設是有外部鏈結性的,作用域是整個工程,在乙個檔案內定義的全域性變數,在另乙個檔案中,通過extern 全域性變數名的宣告,就可以使用全域性變數。

2)全域性靜態變數是顯式用static修飾的全域性變數,作用域是宣告此變數所在的檔案,其他的檔案即使用extern宣告也不能使用。

static和extern的區別

static 一 在c中,static主要定義全域性靜態變數 定義區域性靜態變數 定義靜態函式。1 定義全域性靜態變數 在全域性變數前面加上關鍵字static,該全域性變數變成了全域性靜態變數。全域性靜態變數有以下特點。a.在全域性區分配記憶體。b.如果沒有初始化,其預設值為0.c.該變數在本檔案內...

static和extern的區別

static 一 在c中,static主要定義全域性靜態變數 定義區域性靜態變數 定義靜態函式。1 定義全域性靜態變數 在全域性變數前面加上關鍵字static,該全域性變數變成了全域性靜態變數。全域性靜態變數有以下特點。a.在全域性區分配記憶體。b.如果沒有初始化,其預設值為0.c.該變數在本檔案內...

static和extern的使用

1 修飾區域性變數 static修飾區域性變數,該區域性變數便存放在靜態資料區,其生命週期一直持續到整個程式執行結束,但作用域仍限於該語句塊。特別注意的是,用static修飾區域性變數後,該變數只在初次執行時進行初始化工作,且只進行一次。includevoid fun int main void 程...