在c語言中,extern關鍵字用於聲明一個在其他文件中已定義的全局變量、全局函數或類等符號,在本文中將從多個方面對c語言extern進行詳細的闡述。
一、extern關鍵字
1、關鍵字含義
在C語言中,extern關鍵字用於說明某個變量或函數是在其他文件中定義的,因此在當前文件中需要引用。extern可以用於變量和函數,其作用是在使用本文件中未定義的全局變量或函數時,告訴編譯器在其他文件中尋找其定義。
2、變量用法
extern int a; //聲明全局變量a int main() { printf("a = %d\n", a); //使用變量a return 0; }
變量a在當前文件中未定義,因此需要用extern聲明。在使用變量a時,編譯器會在其他文件中尋找其定義。
3、函數用法
extern void hello(); //聲明函數hello int main() { hello(); //調用函數hello return 0; }
函數hello在當前文件中未定義,因此需要用extern聲明。在調用函數hello時,編譯器會在其他文件中尋找其定義。
二、extern與全局變量
1、變量定義
// a.c文件 int a = 10; //定義全局變量a
// b.c文件 extern int a; //引用全局變量a int main() { printf("a = %d\n", a); //輸出全局變量a的值 return 0; }
在a.c文件中定義了全局變量a,在b.c文件中用extern引用全局變量a。在編譯b.c時,編譯器會在其他文件中尋找全局變量a的定義。
2、變量聲明
// a.c文件 extern int a; //聲明全局變量a int func() { return a; }
// b.c文件 int a = 10; //定義全局變量a int main() { printf("a = %d\n", func()); //輸出全局變量a的值 return 0; }
在a.c文件中用extern聲明全局變量a,在b.c文件中定義全局變量a。在a.c的func函數中引用了全局變量a,在調用func時,編譯器會在其他文件中尋找全局變量a的定義。
三、extern與函數
1、函數定義
// a.c文件 void hello() { //定義函數hello printf("Hello, world!\n"); }
// b.c文件 extern void hello(); //引用函數hello int main() { hello(); //調用函數hello return 0; }
在a.c文件中定義了函數hello,在b.c文件中用extern引用函數hello。在編譯b.c時,編譯器會在其他文件中尋找函數hello的定義。
2、函數聲明
// a.c文件 void hello(); //聲明函數hello void world() { hello(); //調用函數hello }
// b.c文件 void hello() { //定義函數hello printf("Hello, world!\n"); } int main() { world(); //調用函數world return 0; }
在a.c文件中用extern聲明函數hello,在a.c的world函數中調用了函數hello,在b.c文件中定義函數hello。在調用world函數時,編譯器會在其他文件中尋找函數hello的定義。
四、extern與頭文件
1、頭文件定義
// add.h頭文件 int add(int a, int b); //函數聲明
// add.c文件 #include "add.h" //包含頭文件 int add(int a, int b) { //定義函數 return a + b; }
// main.c文件 #include "add.h" //包含頭文件 int main() { int sum = add(1, 2); //調用函數 printf("sum = %d\n", sum); return 0; }
在add.h頭文件中定義了函數add的聲明,在add.c文件中定義了函數add的實現,在main.c文件中包含了add.h頭文件並調用了函數add。
2、多文件定義
// a.c文件 extern int x; //引用全局變量x void hello(); //聲明函數hello
// b.c文件 int x = 123; //定義全局變量x void hello() { //定義函數hello printf("Hello, world!\n"); }
// main.c文件 #include extern int x; //引用全局變量x void hello(); //聲明函數hello int main() { printf("x = %d\n", x); hello(); return 0; }
在a.c文件中用extern引用全局變量x和函數hello,在b.c文件中定義全局變量x和函數hello,在main.c中用extern引用全局變量x和函數hello並調用函數hello。在編譯時,需要將a.c、b.c和main.c都編譯鏈接在一起。
五、extern使用注意事項
1、變量定義
// a.c文件 extern int a; //引用全局變量a
// b.c文件 int a = 10; //定義全局變量a
在a.c中用extern引用全局變量a,在b.c中定義全局變量a。如果在a.c中使用變量a,將會出現鏈接錯誤。
2、函數定義
// a.c文件 extern void hello(); //引用函數hello
// b.c文件 void hello() { //定義函數hello printf("Hello, world!\n"); }
在a.c中用extern引用函數hello,在b.c中定義函數hello。如果在a.c中調用函數hello,將會出現鏈接錯誤。
六、總結
通過以上的闡述和示例,我們了解到了c語言extern關鍵字的作用和使用方式,以及與全局變量和函數的配合使用。在多文件開發中,extern是一個重要的關鍵字,需要注意使用細節。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/191129.html