2010-12-18 33 views

回答

6

它在程序中出現在哪裏?

在大多數情況下,它既是一種聲明,也是一種定義。

OTOH,extern int a;只是一個聲明。

+3

在文件範圍內,'int a;'是一個聲明和一個試探性的定義。 – caf 2010-12-18 02:05:17

+0

@caf:你應該將其作爲答案發布。這是大多數人沒有得到的棘手案例。 – 2010-12-18 02:08:57

+0

默認是函數和類extern嗎? – lex 2010-12-18 02:09:15

17

A 聲明描述了一個對象,而定義請求創建一個對象。所有的定義也是聲明,但相反是不正確的。

int a;的情況下,它是什麼取決於在其被放置在源代碼:

  • 在函數中,int a;是一個定義 - 它要求一個int變量的創建具有自動存儲期限(當然也包括聲明);
  • 在文件範圍內,C和C++的答案是不同的。在C中,int a;是一個暫定義(其中可以有多個,只要類型和鏈接都一致);在C++中,它是具有外部鏈接的普通定義。
  • structunion說明符中,int a;是成員的聲明。
+0

是默認的函數和類extern嗎? – lex 2010-12-18 02:51:55

+2

對最後一句的評論:在C++中,作爲類說明符中的成員聲明的「int a;」是一個定義。 – 2010-12-18 02:52:51

+0

我的意思是'void func();類T(); 「他們是外在的嗎? – lex 2010-12-18 03:01:28

0

考慮:

int a; 

這是一個定義以及聲明。

請看下面的例子...

int i; 
printf("%d", i); 

一些垃圾值將被打印出來。這顯然意味着它有一個內存位置。

如果你想只聲明一個變量,而不是定義它,那麼去「extern」關鍵字。

因此extern int b;只是一個聲明而不是一個定義。

實施例:

extern int var; 
int main(void) 
{ 
    var = 10; 
    return 0; 
} 

因此,上述程序將拋出異​​常爲「VAR」沒有任何地方所定義。