2011-09-30 136 views
5

雖然我讀的Use of 'extern' keyword while defining the variableextern int a之間的區別; extern int a = 42;

一個用戶的答案回答了這些方式

extern int a;  // not a definition 
extern int a = 42; // definition 

我期待雙方都沒有定義,但聲明。我在想這兩個聲明都說變量是在函數外部定義的,我們必須使用extern關鍵字來使用它。這是他的錯誤還是它真的是一個定義? 我知道

extern int a; // variable is already defined but its outside the function 
extern int a=42 ; //I guess a variable is assigned a value but not a definition 

但這些聲明

extern int a = 42; // user said its a definition and now i got confused 

請清除我這些。

+0

的聲明規定外main()函數內聲明的價值正在討論的鏈接問題都假定爲文件作用域聲明,而不是函數作用域。 –

回答

7

無論何時嘗試初始化,該語句都會變爲定義,無論使用的是extern。在這種情況下,extern關鍵字是多餘的,因爲默認情況下,未標記爲static的符號已經具有外部鏈接。

聲明一個外部變量並在當前編譯單元中設置它的初始值是沒有意義的,這是矛盾的。

+0

哇!我不知道c真的是一種奇蹟的語言 – niko

+0

所以你的意思是extern int a = 42;除了int a = 42之外什麼也不是。 right – niko

+0

好的我在看到你的答案後對我的想法有了一些想法,讓我在我的編譯器上試試它,並更新我的問題,如果我有任何問題。但是謝謝!極端的 – niko

5

extern int a;是一個聲明。它不分配空間來存儲a。

extern int a = 42;是一個定義。它分配空間來存儲int值和分配給它42

0

這裏的變量,其中它的定義是在全局聲明節

extern int a; //This is a declaration 

extern int a=42; //This is a definition 
+2

!是啊! – UmNyobe

相關問題