C 中extern與static的一些簡單使用

2021-10-04 06:35:37 字數 2350 閱讀 4654

在不同的編譯單元(不同的cpp檔案)中使用同乙個變數,可以使用extern來修飾,這時候其他的編譯單元(cpp檔案)也可以使用這個變數。

示例**如下:

#pragma once

extern int a;

#include "global.h"

int a =

1;

#pragma once

#include

#include "global.h"

class

a;

#include "a.h"

voida:

:fuc()

voida:

:change()

#include 

#include "a.h"

#include "global.h"

using namespace std;

int main()

執行的結果為:

可以發現a.cpp中的a與c.cpp中的a是同乙個a,位址是完全相同的。

但是使用extern修飾全域性變數的時候要注意不要將宣告與定義寫在一起,這樣會導致extern的修飾無效。

extern int a =12;

//這樣等價於 int a = 12;

在某個檔案中定義全域性變數,在其他的檔案中可以使用extern來進行引用。

示例**如下:

#pragma once

int a =

15;

#pragma once

#include

class

class1

;

#include "class1.h"

using namespace std;

extern int a;

void class1:

:fuc()

void class1:

:change()

//主函式

#include

#include "class1.h"

using namespace std;

extern int a;

int main()

執行結果為:

可以得知main函式和class1裡面的a都是global.h中定義的那個a值。

用static也可以進行全域性變數的修飾,對於加static與不加static的全域性變數,加了static的話,就不能使用extern進行引用。用static修飾的全域性實際上是該編譯單元的全域性,而extern修飾的全域性,不同的編譯單元上的全域性。

示例**如下:

#pragma once

#include

static int y =

100;

void

func()

;

#include "class.h"

using namespace std;

void

func()

//main

#include

#include "class.h"

using namespace std;

int main()

執行結果如下:

可以發現main中的y與class中的y實際上是不在同乙個位址上,並不是同乙個y。

用static修飾區域性變數的話是將變數存在記憶體的靜態區,每次的值儲存到下次呼叫,程式結束的時候釋放。

運用static的時候也要注意static的宣告與定義是必須在一起的,static也不能與extern連用,也盡量把不要把static修飾放在標頭檔案中(應該放在原始檔中),這樣可以避免引用標頭檔案時不必要的拷貝。

參考網頁: c/c++中extern關鍵字詳解.

C語言基礎 extern 與 static

外部函式 如果在當前檔案中定義的函式允許其他檔案訪問 呼叫,就稱為外部函式。c語言規定,不允許有同名的外部函式。內部函式 如果在當前檔案中定義的函式不允許其他檔案訪問 呼叫,只能在內部使用,就稱為內部函式。c語言規定不同的原始檔可以有同名的內部函式,並且互不干擾。1 預設情況下所有函式都是外部函式 ...

c語言static與extern的用法

一,static和extern 大工程下我們會碰到很多原始檔。檔案a.c static int i 只在a檔案中用 int j 在工程裡用 static void init 只在a檔案中用 void callme 在工程中用 上面的全域性i變數和init 函式只能用在a.c檔案中,全域性變數sum的...

c語言static與extern的用法

一,static和extern 大工程下我們會碰到很多原始檔。檔案a.c static int i 只在a檔案中用 int j 在工程裡用 static void init 只在a檔案中用 void callme 在工程中用 上面的全域性i變數和init 函式只能用在a.c檔案中,全域性變數sum的...