吾解 extern

在函數中

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 和 賦值不能同時進行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章