2011-03-03 22 views
2

據我所知,在C++中,可以多次聲明相同的名稱,只要它們在所有這些聲明中具有相同的類型即可。要聲明類型爲int的對象,但未定義它,則使用extern關鍵字。所以下面應該是正確的,並通過編譯:在本地範圍內的C++多重聲明

extern int x; 
extern int x; // OK, still declares the same object with the same type. 
int x = 5; // Definition (with initialization) and declaration in the same 
       // time, because every definition is also a declaration. 

但是,一旦我提出這一個函數內部,編譯器(GCC 4.3.4)抱怨說,我在重新聲明x,它是非法的。該錯誤消息是以下情況:

test.cc:9: error: declaration of 'int x' 
test.cc:8: error: conflicts with previous declaration 'int x' 

其中int x = 5;是在第9行,和extern int x是在管線8

我的問題是:
如果多個聲明不應該是錯誤,則爲什麼在這種特殊情況下這是一個錯誤?

回答

7

extern聲明聲明的東西有外部鏈接(指定義有望在一些編譯單元,可能是當前在文件範圍內出現)。局部變量不能有外部鏈接,所以編譯器會抱怨你試圖做一些矛盾的事情。

+0

比你,現在我明白了。所以沒有辦法只是在函數內部聲明一個對象,而沒有在同一時間定義它。 – SasQ 2011-03-03 22:38:57

+0

@SasQ:是的,我認爲這是事實。 – 2011-03-04 10:59:17