2011-11-28 77 views
0

根據我所處處讀到的內部聯動的定義,內部聯動意味着對象在文件範圍或同一文件中的任何地方都可見。關於內部聯動的困惑

int main() 
{ 
    extern int i; 
    i = 0; //linker error 
} 

static int i; 

你會有任何方式(),使i可見裏面,如果它的主要後沒有宣佈之前,定義?

+0

我懷疑你真的**有關於int的聲明的問題。你能詳細說明真正的問題嗎? –

回答

1

這不是一個鏈接問題,而是一個編譯問題。當您的main編譯時,i尚未聲明。所以你必須在你的main函數之前加上i才能編譯它。

+0

即使我把'extern int i'放在它之前,它仍然不會鏈接。更新。 – user103214

+0

我不確定'extern'應該有什麼幫助。你爲什麼不把'i'的聲明放在你的'main'之前並且用它來完成呢? – Constantinius

+0

這將打破提出內部聯繫問題的目的。 – user103214

1

你混淆了幾個問題。首先,「聯繫」關注符號而不是對象。其次,獨立於鏈接,必須先聲明符號,然後才能使用它。在主要之前放置static int i,並且沒有問題。

0

您的解決方案不起作用extern表示變量是全局可見的,但static表示它不是。

推測鏈接器認爲這是兩個不同的變量,並且會感到困惑。

在使用前聲明所有對象,但你也必須是一致的。