在C語言中,extern
是一個(gè)關(guān)鍵字,用于聲明外部變量和函數(shù)。
在C語言中,如果要在一個(gè)源文件中使用另一個(gè)源文件中定義的全局變量或函數(shù),就需要使用extern
關(guān)鍵字來聲明這些變量或函數(shù)。extern
關(guān)鍵字告訴編譯器,這些變量或函數(shù)是在其他源文件中定義的,而不是當(dāng)前源文件中定義的。
extern
的用法分為兩種情況:
聲明全局變量:如果要在一個(gè)源文件中使用另一個(gè)源文件中定義的全局變量,就需要在使用的源文件中使用extern
關(guān)鍵字來聲明這個(gè)全局變量。例如,如果在源文件A中定義了一個(gè)全局變量int a;
,在源文件B中要使用這個(gè)全局變量,就需要在源文件B中使用extern
關(guān)鍵字進(jìn)行聲明:extern int a;
。這樣,編譯器就知道在鏈接時(shí)要從其他源文件中找到這個(gè)全局變量的定義。
聲明外部函數(shù):如果要在一個(gè)源文件中調(diào)用另一個(gè)源文件中定義的函數(shù),就需要在使用的源文件中使用extern
關(guān)鍵字來聲明這個(gè)函數(shù)。例如,如果在源文件A中定義了一個(gè)函數(shù)void func();
,在源文件B中要調(diào)用這個(gè)函數(shù),就需要在源文件B中使用extern
關(guān)鍵字進(jìn)行聲明:extern void func();
。這樣,編譯器就知道在鏈接時(shí)要從其他源文件中找到這個(gè)函數(shù)的定義。
需要注意的是,extern
關(guān)鍵字只是一個(gè)聲明,不是定義。它只是告訴編譯器某個(gè)變量或函數(shù)在其他源文件中有定義,而不是在當(dāng)前源文件中定義。因此,extern
關(guān)鍵字不能初始化變量,也不能給函數(shù)提供函數(shù)體。變量的定義和函數(shù)的定義必須在其他源文件中進(jìn)行。
總結(jié)來說,extern
關(guān)鍵字的作用是告訴編譯器某個(gè)變量或函數(shù)在其他源文件中有定義,以便在編譯和鏈接時(shí)正確地引用這些變量或函數(shù)。