在c語(yǔ)言中代碼的執(zhí)行順序是從上往下執(zhí)行的,如果定義的函數(shù)或者變量在調(diào)用之后,那么調(diào)用的時(shí)候編譯就會(huì)找不到需要使用的變量。這樣就會(huì)出現(xiàn)錯(cuò)誤,如下代碼:
創(chuàng)新互聯(lián)建站主營(yíng)陽(yáng)西網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app開(kāi)發(fā)定制,陽(yáng)西h5小程序制作搭建,陽(yáng)西網(wǎng)站營(yíng)銷(xiāo)推廣歡迎陽(yáng)西等地區(qū)企業(yè)咨詢(xún)
#include
int main(){
printf("%d",num);
function();
return 0;
}
int num =5;
void function(){
printf(" hello word main function\n");
}
執(zhí)行這句代碼就會(huì)出現(xiàn)錯(cuò)誤,錯(cuò)誤原因就是因?yàn)?,num和funcion函數(shù)定義在main函數(shù)的下面導(dǎo)致main函數(shù)中執(zhí)行num和function的時(shí)候編譯器并沒(méi)有編譯到那里所有編譯器就會(huì)認(rèn)為沒(méi)有定義num和function 函數(shù)所以會(huì)出現(xiàn)錯(cuò)誤。那么我可以使用extern關(guān)鍵字來(lái)改正個(gè)問(wèn)題。extern關(guān)鍵字可以 讓變量全局化。
#include
extern int num ;
void function();
int main(){
printf("%d",num);
function();
return 0;
}
int num =5;
void function(){
printf(" hello word main function\n");
}
這樣就可以正常運(yùn)行了。extern 關(guān)鍵字還可以調(diào)用其他.c文件中的變量和函數(shù) 如下:
test_extern.c
#include
int num =5;
int age=29;
char name="make";
void func(){
printf(" 調(diào)用 test_extern函數(shù)??!\n ");
}
test_main.c
#include
int main(){
extern int num ;
extern int age;
extern char name;
extern void func();
func();
printf("%d\n",num);
printf("%d\n",age);
pirntf("%s\n",name);
return 0;
}
執(zhí)行上面代碼就可以在test_main文件中打印出test_extern文件中的字段和方法。這樣寫(xiě)有一個(gè)好處就是可以不用再文件中因?yàn)閯e的 .h頭文件,因?yàn)槿绻?h頭文件就可以調(diào)用.h文件中所有的函數(shù)和字段,這樣不是很安全,所以如果想代用另外一個(gè).c源文件的函數(shù)時(shí)可以使用extern關(guān)鍵字來(lái)調(diào)用這樣提高 了函數(shù)的安全性。
總結(jié):extern 有三種用三,在本文件中使變量全局化,調(diào)用其他源文件中的字段,調(diào)用其他源文件中的函數(shù)。