利用關鍵字extern,能夠在一個文件中引用另外一個文件中定義的變量或者函數,下面就結合具體的實例,分類說明一下。編程
1、引用同一個文件中的變量安全
#include<stdio.h>函數
int func();學習
int main()spa
{視頻
func(); //1blog
printf("%d",num); //2教程
return 0;get
}編譯器
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);
}
2、引用另外一個文件中的變量
若是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關鍵字更好。
3、引用另外一個文件中的函數
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++學習企鵝圈子】,分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比本身琢磨更快哦!
編程學習書籍:
編程學習視頻: