extern 和 static 的用法

2021-07-29 17:03:34 字數 1234 閱讀 5914

當乙個工程很大,有多個原始檔時,其中乙個原始檔可能會用到另乙個原始檔中的變數,或者函式。這時可以把這些變數或函式宣告成全域性變數,方法就是在乙個變數 或函式宣告的前面加上extern 單獨放在乙個標頭檔案中,讓其他的原始檔包含這個標頭檔案,但是要注意的是可能有很多的 原始檔包含了這個標頭檔案。這個時候只能有其中的乙個原始檔定義該變數或函式 ,否則會造成重複定義。

下面這個例子的執行環境是在 codeblocks 下:

乙個 test project 包含了 a.cpp 和 main.cpp 兩個原始檔和 a.h 乙個標頭檔案

a.h 標頭檔案中有如下的宣告:

extern char a;

extern void msg();

然後下面是a.cpp 中的內容:

#include #include "a.h"

using namespace std;

char a='a';

void msg()

以看到其中先包含了標頭檔案並且實現了對 變數 a 和 msg函式的 定義。

最後看一下main.cpp 函式:

#include #include #include "a.h"

using namespace std;

//extern char a;

//void msg();

int main()

main.cpp:

#include #include #include "a.h"

using namespace std;

char a='b';

int main(){

cout

1.      static 修飾區域性變數

static 修飾區域性變數 會延長區域性變數的生命期,本來區域性變數在函式被呼叫時,在棧上分配空間,加上 static 後就變成在堆上分配空間,而且只會初始化一次,下次再呼叫該函式對應的值就是上次退出時的值,不會再重新初始化(雖然語句還是寫著重新初始化,相當於全域性變數)。但是注意的是變數的作用範圍還是沒有變,還是在函式範圍內。

下面是例子:

**:#include #include using namespace std;

void ss(){

static int a=0;

a++;

cout<

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 程...