根據我所處處讀到的內部聯動的定義,內部聯動意味着對象在文件範圍或同一文件中的任何地方都可見。關於內部聯動的困惑
int main()
{
extern int i;
i = 0; //linker error
}
static int i;
你會有任何方式(),使i
可見裏面,如果它的主要後沒有宣佈之前,定義?
根據我所處處讀到的內部聯動的定義,內部聯動意味着對象在文件範圍或同一文件中的任何地方都可見。關於內部聯動的困惑
int main()
{
extern int i;
i = 0; //linker error
}
static int i;
你會有任何方式(),使i
可見裏面,如果它的主要後沒有宣佈之前,定義?
這不是一個鏈接問題,而是一個編譯問題。當您的main
編譯時,i
尚未聲明。所以你必須在你的main
函數之前加上i
才能編譯它。
即使我把'extern int i'放在它之前,它仍然不會鏈接。更新。 – user103214
我不確定'extern'應該有什麼幫助。你爲什麼不把'i'的聲明放在你的'main'之前並且用它來完成呢? – Constantinius
這將打破提出內部聯繫問題的目的。 – user103214
你混淆了幾個問題。首先,「聯繫」關注符號而不是對象。其次,獨立於鏈接,必須先聲明符號,然後才能使用它。在主要之前放置static int i
,並且沒有問題。
您的解決方案不起作用extern
表示變量是全局可見的,但static
表示它不是。
推測鏈接器認爲這是兩個不同的變量,並且會感到困惑。
你有在使用前聲明所有對象,但你也必須是一致的。
我懷疑你真的**有關於int的聲明的問題。你能詳細說明真正的問題嗎? –