C語言extern的用法

2021-08-14 22:55:02 字數 2316 閱讀 7768

利用關鍵字extern,可以在乙個檔案中引用另乙個檔案中定義的變數或者函式,下面就結合具體的例項,分類說明一下。

一、引用同乙個檔案中的變數

#include

int func();

int main()

int num = 3;

int func()

如果按照這個順序,變數 num在main函式的後邊進行宣告和初始化的話,那麼在main函式中是不能直接引用num這個變數的,因為當編譯器編譯到這一句話的時候,找不到num這個變數的宣告,但是在func函式中是可以正常使用,因為func對num的呼叫是發生在num的宣告和初始化之後。

如果我不想改變num的宣告的位置,但是想在main函式中直接使用num這個變數,怎麼辦呢?可以使用extern這個關鍵字。像下面這一段**,利用extern關鍵字先宣告一下num變數,告訴編譯器num這個變數是存在的,但是不是在這之前宣告的,你到別的地方找找吧,果然,這樣就可以順利通過編譯啦。但是你要是想欺騙編譯器也是不行的,比如你宣告了extern int num;但是在後面卻沒有真正的給出num變數的宣告,那麼編譯器去別的地方找了,但是沒找到還是不行的。

下面的程式就是利用extern關鍵字,使用在後邊定義的變數。

#include

int func();

int main()

int num = 3;

int func()

二、引用另乙個檔案中的變數

如果extern這個關鍵字就這點功能,那麼這個關鍵字就顯得多餘了,因為上邊的程式可以通過將num變數在main函式的上邊宣告,使得在main函式中也可以使用。

extern這個關鍵字的真正的作用是引用不在同乙個檔案中的變數或者函式。

main.c

#include

int main()

b.c

#include

int num = 5;

void func()

例如,這裡b.c中定義了乙個變數num,如果main.c中想要引用這個變數,那麼可以使用extern這個關鍵字,注意這裡能成功引用的原因是,num這個關鍵字在b.c中是乙個全域性變數,也就是說只有當乙個變數是乙個全域性變數時,extern變數才會起作用,向下面這樣是不行的。

mian.c

#include

int main()

b.c

#include

void func()

另外,extern關鍵字只需要指明型別和變數名就行了,不能再重新賦值,初始化需要在原檔案所在處進行,如果不進行初始化的話,全域性變數會被編譯器自動初始化為0。像這種寫法是不行的。

extern

int num=4;

但是在宣告之後就可以使用變數名進行修改了,像這樣:

#include

int main()

如果不想這個變數被修改可以使用const關鍵字進行修飾,寫法如下:

mian.c

#include

int main()

b.c

#include

const

int num=5;

void func()

使用include將另乙個檔案全部包含進去可以引用另乙個檔案中的變數,但是這樣做的結果就是,被包含的檔案中的所有的變數和方法都可以被這個檔案使用,這樣就變得不安全,如果只是希望乙個檔案使用另乙個檔案中的某個變數還是使用extern關鍵字更好。

三、引用另乙個檔案中的函式

extern除了引用另乙個檔案中的變數外,還可以引用另乙個檔案中的函式,引用方法和引用變數相似。

mian.c

#include

int main()

b.c

#include

const

int num=5;

void func()

這裡main函式中引用了b.c中的函式func。因為所有的函式都是全域性的,所以對函式的extern用法和對全域性變數的修飾基本相同,需要注意的就是,需要指明返回值的型別和引數。

C語言中extern的用法

在c語言中,修飾符extern用在變數或者函式的宣告前,用來說明 此變數 函式是在別處定義的,要在此處引用 1.extern修飾變數的宣告。舉例來說,如果檔案a.c需要引用b.c中變數int v,就可以在a.c中宣告extern int v,然後就可以引用變數v。這裡需要注意的是,被引用的變數v的鏈...

C語言中extern的用法

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

c語言中的extern用法

test.c include int number 1 int getnum int num int getnum2 int num main.c include extern int getnum int num extern int getnum2 int num extern int numb...