static和extern的區別

2021-06-21 00:27:55 字數 1135 閱讀 5039

static

:一、在c中,static主要定義全域性靜態變數、定義區域性靜態變數、定義靜態函式。

1、定義全域性靜態變數:在全域性變數前面加上關鍵字static,該全域性變數變成了全域性靜態變數。全域性靜態變數有以下特點。

a.在全域性區分配記憶體。

b.如果沒有初始化,其預設值為0.

c.該變數在本檔案內從定義開始到檔案結束可見。

2、定義區域性靜態變數:在區域性變數前面加上關鍵字static,其特點如下:

a.該變數在全域性資料區分配記憶體。

b.它始終駐留在全域性資料區,直到程式執行結束。

c. 其作用域為區域性作用域,當定義它的函式或語句塊結束時,其作用域隨之結束。

3、定義靜態函式:在函式返回型別前加上static關鍵字,函式即被定義為靜態函式,其特點如下:

a.靜態函式只能在本原始檔中使用

b.在檔案作用域中宣告的inline函式預設為static型別

二、在c++中新增了兩種作用:定義靜態資料成員或靜態函式成員。

定義靜態資料成員。

a.記憶體分配:靜態資料成員在程式的全域性資料去分配。

b.初始化和定義:靜態資料成員定義時要分配空間,所以不能在類宣告中定義。

靜態資料成員因為程式以開始執行就必須存在,所以其初始化的最佳位置在類的內部,public、protected、private關鍵字對它的限定和普通資料成員一樣,因為其空間在全域性資料分配,屬於所有本類的物件共享。它不屬於特定的類物件,在沒產生類物件時,其作用域可見,即沒有產生類的例項時,就可以操作它了。

靜態成員函式。靜態成員函式與類相聯絡,不與類的物件相聯絡。靜態成員函式不能訪問非靜態資料成員。

extern:

extern可以置於變數或函式前,以在別的檔案中標識變數或函式的定義,並提示編譯器遇到此變數或函式時在其他模組中尋找其定義。extern是c、c++語言中表明函式和全域性變數作用範圍(可見性)的關鍵字。

對於extern變數來說,僅僅是乙個變數的宣告,其並不是定義,不會分配記憶體空間。

extern表示將變數或函式宣告為外部鏈結,變數預設是內部鏈結,函式預設是外部鏈結。因此用來外部鏈結的函式,宣告時有無extern都可以連線通過。而全域性變數則不行。通常,在模組的標頭檔案中,對本模組提供給其他模組引用的函式和全域性變數以關鍵字extern宣告。

static和extern的區別

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

static和extern的使用

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

extern和static 的用法

一 extern定義全域性變數的用法 定義方式 1 在原始檔中定義 變數型別 變數名 變數初始化值 宣告方式一 1 在定義該變數的類的標頭檔案中宣告該變數 extern 變數型別 變數名 2 在需要使用該變數的其他類中新增該類的標頭檔案。宣告方式二 1 在需要使用該變數的其他類的標頭檔案中新增該類的...