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

一、參考同一個檔案中的變數
#include<stdio.h>
int func();
int main()
{
func(); //1
printf("%d",num); //2
return 0;
}
int num = 3;
int func()
{
printf("%d\n",num);
}
如果按照這個順序,變數 num在main函式的后邊進行宣告和初始化的話,那么在main函式中是不能直接參考num這個變數的,因為當編譯器編譯到這一句話的時候,找不到num這個變數的宣告,但是在func函式中是可以正常使用,因為func對num的呼叫是發生在num的宣告和初始化之后,
如果我不想改變num的宣告的位置,但是想在main函式中直接使用num這個變數,怎么辦呢?可以使用extern這個關鍵字,像下面這一段代碼,利用extern關鍵字先宣告一下num變數,告訴編譯器num這個變數是存在的,但是不是在這之前宣告的,你到別的地方找找吧,果然,這樣就可以順利通過編譯啦,但是你要是想欺騙編譯器也是不行的,比如你宣告了extern int num;但是在后面卻沒有真正的給出num變數的宣告,那么編譯器去別的地方找了,但是沒找到還是不行的,
下面的程式就是利用extern關鍵字,使用在后邊定義的變數,
#include<stdio.h>
int func();
int main()
{
func(); //1
extern int num;
printf("%d",num); //2
return 0;
}
int num = 3;
int func()
{
printf("%d\n",num);
}
二、參考另一個檔案中的變數
如果extern這個關鍵字就這點功能,那么這個關鍵字就顯得多余了,因為上邊的程式可以通過將num變數在main函式的上邊宣告,使得在main函式中也可以使用,
extern這個關鍵字的真正的作用是參考不在同一個檔案中的變數或者函式,
main.c
#include<stdio.h>
int main()
{
extern int num;
printf("%d",num);
return 0;
}
b.c
#include<stdio.h>
intnum = 5;
voidfunc()
{
printf("fun in a.c");
}
例如,這里b.c中定義了一個變數num,如果main.c中想要參考這個變數,那么可以使用extern這個關鍵字,注意這里能成功參考的原因是,num這個關鍵字在b.c中是一個全域變數,也就是說只有當一個變數是一個全域變數時,extern變數才會起作用,向下面這樣是不行的,
mian.c
#include<stdio.h>
int main()
{
extern int num;
printf("%d",num);
return 0;
}
b.c
#include<stdio.h>
void func()
{
int num = 5;
printf("fun in a.c");
}
另外,extern關鍵字只需要指明型別和變數名就行了,不能再重新賦值,初始化需要在原檔案所在處進行,如果不進行初始化的話,全域變數會被編譯器自動初始化為0,像這種寫法是不行的,
extern int num=4;
但是在宣告之后就可以使用變數名進行修改了,像這樣:
#include<stdio.h>
int main()
{
extern int num;
num=1;
printf("%d",num);
return 0;
}
如果不想這個變數被修改可以使用const關鍵字進行修飾,寫法如下:
mian.c
#include<stdio.h>
int main()
{
extern const int num;
printf("%d",num);
return 0;
}
b.c
#include<stdio.h>
const int num=5;
void func()
{
printf("fun in a.c");
}
使用include將另一個檔案全部包含進去可以參考另一個檔案中的變數,但是這樣做的結果就是,被包含的檔案中的所有的變數和方法都可以被這個檔案使用,這樣就變得不安全,如果只是希望一個檔案使用另一個檔案中的某個變數還是使用extern關鍵字更好,
三、參考另一個檔案中的函式
extern除了參考另一個檔案中的變數外,還可以參考另一個檔案中的函式,參考方法和參考變數相似,
mian.c
#include<stdio.h>
int main()
{
extern void func();
func();
return 0;
}
b.c
#include<stdio.h>
const int num=5;
void func()
{
printf("fun in a.c");
}
這里main函式中參考了b.c中的函式func,因為所有的函式都是全域的,所以對函式的extern用法和對全域變數的修飾基本相同,需要注意的就是,需要指明回傳值的型別和引數,
以上所述是小編給大家介紹的C語言正確使用extern關鍵字詳解整合,希望對大家有所幫助,

如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!
【C語言C++學習企鵝圈子】,分享(原始碼、專案實戰視頻、專案筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習書籍:

編程學習視頻:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/246713.html
標籤:C
上一篇:C語言從入門到精通:嵌套回圈
