文件間調(diào)用變量(extern,include)
首先要搞清楚的是.h頭文件中都是一些聲明性的語(yǔ)句,是不分配內(nèi)存的,所以頭文件中有對(duì)函數(shù)的聲明,有define語(yǔ)句,有沒(méi)有實(shí)例化的結(jié)構(gòu)體定義,但是沒(méi)有對(duì)變量的定義(比如 int a),有的只是對(duì)外變量的聲明(extern int a)。
因?yàn)槿肿兞恳话愣x在原文件.c中(假設(shè)是a.c),對(duì)于一個(gè)文件調(diào)用另一個(gè)文件的全局變量,我們不能用#include包含源文件而只能包含頭文件,所以常用的方法是用extern int a來(lái)聲明外部變量。 還有一種方法是可以是在a.c文件中定義了全局變量int global_num ,可以在a.h頭文件中寫(xiě)extern int global_num 這樣其他源文件可以通過(guò)include a.h來(lái)聲明她是外部變量就可以了.
對(duì)于一個(gè)文件調(diào)用另一個(gè)文件中的函數(shù),最常用的是在.h頭文件中配上extern聲明函數(shù),其他源文件可以通過(guò)#include該頭文件來(lái)聲明函數(shù)并且在調(diào)用該函數(shù)。 也可以是在a.c中定義該函數(shù)int fun()后 ,在 b.c文件中使用extern int fun()來(lái)聲明該函數(shù)是外部定義后并實(shí)行調(diào)用。
此外,extern修飾符可用于指示C或者C++函數(shù)的調(diào)用規(guī)范。比如在C++中調(diào)用C庫(kù)函數(shù),就需要在C++程序中用extern “C”聲明要引用的函數(shù)。這是給鏈接器用的,告訴鏈接器在鏈接的時(shí)候用C函數(shù)規(guī)范來(lái)鏈接。主要原因是C++和C程序編譯完成后在目標(biāo)代碼中命名規(guī)則不同。
|