(1)變量
extern int a;//聲明一個全局變量a
int a; //定義一個全局變量a
extern int a =0 ;//定義一個全局變量a 並給初值。
int a =0;//定義一個全局變量a,並給初值,
定義只能出現在一處。不管是int a;還是extern int a=0;還是int a=0;都只能出現一次,而那個extern int a可以出現很多次。當你要引用一個全局變量的時候,你就要聲明,extern int a;這時候extern不能省略,因爲省略了,就變成int a;這是一個定義,不是聲明。
(2)函數
由於函數的定義和聲明是有區別的,定義函數要有函數體,聲明函數沒有函數體,所以函數定義和聲明時都可以將extern省略掉。
比如:
int fun(void)
{
return 0;
}
定義一個全局函數
int fun(void);
我們對它做了個聲明,然後後面就可以用了
加不加extern都一樣
我們也可以把對fun的聲明 放在一個頭文件裏,最後變成這樣
int fun(void);//函數聲明,所以省略了extern,完整些是extern int fun(void);
一個要使用你的fun()的程序,把這個頭文件包含進去,就可以使用這個fun()函數了。
但是,對應的,如果是這個程序要使用全局變量,那麼要extern 某某變量;不然就成了定義了。
總結下:
對變量而言,如果你想在本源文件中使用另一個源文件的變量,就需要在使用前用extern聲明該變量,或者在頭文件中用extern聲明該變量;
對函數而言,如果你想在本源文件中使用另一個源文件的函數,就需要在使用前用聲明該變量,聲明函數加不加extern都沒關係,所以在頭文件中函數可以不用加extern。