C語言基礎 extern 與 static

2021-06-28 21:57:43 字數 2671 閱讀 3799

外部函式:如果在當前檔案中定義的函式允許其他檔案訪問、呼叫,就稱為外部函式。c語言規定,不允許有同名的外部函式。

內部函式:如果在當前檔案中定義的函式不允許其他檔案訪問、呼叫,只能在內部使用,就稱為內部函式。c語言規定不同的原始檔可以有同名的內部函式,並且互不干擾。

1> 預設情況下所有函式都是外部函式

2> 不允許有同名的外部函式

1> 允許不同檔案中有同名的內部函式

static對函式的作用:

1> 定義乙個內部函式

2> 宣告乙個內部函式

extern對函式的作用:

1> 完整地定義乙個外部函式

2> 完整地宣告乙個外部函式

(extern可以省略,預設情況下宣告和定義的函式都是外部函式)

例如,main.c

// 宣告乙個test函式

// 完整地宣告乙個外部函式

// extern可以省略

//extern void test();

void test();

//void test2();

int main()

//void test()

//static void test2()

one.c

#include // 宣告乙個內部函式

static void test2();

// 完整地定義乙個外部函式

/*extern void test()

*/// 預設情況下,所有的函式都是外部函式,所以可以省略extern

void test()

// 定義乙個內部函式

static void test2()

1.定義內部函式

從上面的例子可以看出,one.c中定義的one函式是可以被其他原始檔訪問的。其實有時候,我們可能想定義乙個"內部函式",也就是不想讓其他檔案訪問本檔案中定義的函式。這個非常簡單,你只需要在定義函式的時候加個static關鍵字即可。

#include static void test(); 

int main(int argc, const char * argv)

static void test()

1.static

* 在定義函式時,在函式的最左邊加上static可以把該函式宣告為內部函式(又叫靜態函式),這樣該函式就只能在其定義所在的檔案中使用。如果在不同的檔案中有同名的內部函式,則互不干擾。

* static也可以用來宣告乙個內部函式

2.extern

* 在定義函式時,如果在函式的最左邊加上關鍵字extern,則表示此函式是外部函式,可供其他檔案呼叫。c語言規定,如果在定義函式時省略extern,則隱含為外部函式。

* 在乙個檔案中要呼叫其他檔案中的外部函式,則需要在當前檔案中用extern宣告該外部函式,然後就可以使用,這裡的extern也可以省略。

全域性變數分2種:

1> 預設情況下,所有的全域性變數都是外部變數

1> 不同檔案中的同名外部變數,都代表著同乙個變數

1> 不同檔案中的同名內部變數,互不影響

static對變數的作用:

定義乙個內部變數

extern對變數的作用:

宣告乙個外部變數

static對函式的作用:

定義和宣告乙個內部函式

extern對函式的作用:

定義和宣告乙個外部函式(可以省略)

例如,

#include void test();

// 定義乙個外部變數

//int a; 這麼多個a都是代表同乙個a

//int a;

//int a;

//int a;

//int a;

// 定義乙個內部變數

static int b;

// 宣告乙個外部變數

//extern int a;

int main()

int a;

#include int a;

static int b;

void test()

static修飾區域性變數

1. 延長區域性變數的生命週期:程式結束的時候,區域性變數才會被銷毀

2 .並沒有改變區域性變數的作用域

3 .所有的test函式都共享著乙個變數b

static修飾區域性變數的使用場合:

1.如果某個函式的呼叫頻率特別高

2.這個函式內部的某個變數值是固定不變的

#include void test()

int main()

test();

test();

test();

return 0;

}

1.extern可以用來宣告乙個全域性變數,但是不能用來定義變數

2.預設情況下,乙個全域性變數是可以供多個源檔案共享的,也就說,多個原始檔中同名的全域性變數都代表著同乙個變數

3.如果在定義全域性變數的時候加上static關鍵字,此時static的作用在於限制該全域性變數的作用域,只能在定義該全域性變數的檔案中才能使用,跟其他原始檔中的同名變數互不干擾

c語言extern詳解

1 變數 extern int a 宣告乙個全域性變數a int a 定義乙個全域性變數a extern int a 0 定義乙個全域性變數a 並給初值。int a 0 定義乙個全域性變數a,並給初值,定義只能出現在一處。不管是int a 還是extern int a 0 還是int a 0 都只能...

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