一、extern函數是什麼
在C語言編程中,使用extern關鍵字可以標識函數是在其他代碼文件中定義的,同時可以在當前文件中使用該函數。extern函數常用於多文件程序間函數的調用,也可用於在同一文件中將函數放在後面定義,但前面的函數使用到該函數時使用extern標註。
//示例代碼1 //file1.c #include extern void function1(); int main(){ function1(); return 0; } //file2.c #include void function1(){ printf("This is function1.\n"); }
在file1.c中使用了extern標註function1函數,表明該函數在其他文件中定義,在main函數中可以直接使用function1函數。在file2.c中定義了function1函數的具體實現,並在file1.c中使用。
二、extern函數的用途
使用extern函數主要有兩種用途,一是在多文件程序間進行函數調用,二是在同一文件中進行函數的定義。
1.多文件程序間函數的調用
在多文件程序中,一個文件中定義的函數可能會被其他文件調用。這時,可以在要使用該函數的文件中聲明函數的extern標誌,讓編譯器知道該函數是在其他文件中定義的,然後編譯後再鏈接到一起生成可執行文件。
//示例代碼2 //file1.c #include extern void function1(); int main(){ function1(); return 0; } //file2.c #include void function1(){ printf("This is function1.\n"); }
在上面的示例代碼中,main函數所在的file1.c文件使用了extern關鍵字標註function1函數,表明function1函數定義在其他文件中,需要在編譯時鏈接其他文件。在file2.c文件中定義了function1函數的具體實現。
2.同一文件中函數的定義
在同一文件中,可以先定義後使用,這時候可以在使用的地方使用extern關鍵字標註要使用的函數。
//示例代碼3 #include void function2(){//先使用 printf("This is function2.\n"); } int main(){ function2();//再定義 return 0; }
在上面的示例代碼中,先使用了function2函數,再進行函數的定義。使用extern關鍵字同樣可以實現這個功能。
//示例代碼4 #include extern void function3();//使用extern標註 int main(){ function3();//再定義 return 0; } void function3(){ printf("This is function3.\n"); }
三、extern函數的注意點
1.非extern函數不能在不同文件中重複定義
在C語言程序中,非extern函數不能在不同文件中重複定義。如果在同一個文件中重複定義同一個函數也是錯誤的。
//示例代碼5 //file1.c #include void function4(){ printf("This is function4.\n"); } //file2.c #include void function4(){ printf("This is function4.\n"); }
上面的代碼中,在file1.c和file2.c分別定義了同名的function4函數,這是不允許的。
2.extern函數的定義必須在使用之前
在C語言中,extern函數的定義必須在使用之前,否則會編譯錯誤。
//示例代碼6 #include int main(){ function5(); return 0; } extern void function5(); void function5(){ printf("This is function5.\n"); }
在上面的代碼中,function5函數的定義在main函數之後,會出現編譯錯誤。
3.extern函數在不同文件中的實現必須相同
如果同一個函數在不同的文件中聲明時使用不同的參數類型或返回值類型,那麼程序很可能出現錯誤。
//示例代碼7 //file1.c #include extern int function6(int num); int main(){ int result = function6(3); printf("The result is %d.", result); return 0; } //file2.c #include extern float function6(float num); float function6(float num){ return num/2; }
在上面的代碼中,在file1.c中定義了一個調用參數為int類型,返回值為int類型的function6函數,而在file2.c中定義的function6函數傳入參數為float,返回值也為float。
四、總結
在C語言中,extern函數常用於多文件程序間函數的調用以及同一文件中函數的先使用後定義。總結來說,extern函數是一個很重要的機制,方便了編程工作的同時也需要注意遵守相關規則。
原創文章,作者:JAQNH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370397.html