在函數中
void d(){
....
extern int a = 15;
....
}
或代碼塊中
{
......
extern int a = 15;
......
}
在編譯的過程中都會出錯
error : a has both ‘extren ’ and initializer
但將代碼改爲
{
......
extern int a ;
a= 15;
......
}
編譯就可以通過
原因:
變量的定義和聲明
extern int a ; // 變量的聲明 a,
當聲明變量a以後,代碼塊便可以使用全局變量 a ;
extern int a=15 ; // 聲明和定義a
就會對a定義多次
而聲明可以多次,定義卻只能有一次。
在代碼塊中使用extern , 表明a 的鏈接屬性是 external , 而 代碼塊中的變量是局部變量,是沒有鏈接屬性,所以,在代碼塊中使用extern ,其實是對全局變量a 的一次聲明,在其他地方已經對 a 進行定義 ,extern int a=15 會造成a 的多次定義。extern 和 賦值不能同時進行。