2010-07-19 217 views
15

什麼是全局變量的默認存儲類?什麼是全局變量的默認存儲類?

雖然在網上搜索我發現,有些網站說它是static。但是,靜態意味着內部鏈接,並且該變量不能在文件範圍之外使用,即它不應該可用於其他目標文件。但是,他們仍然可以使用extern int i等聲明訪問其他文件。

而且,如果我明確提到static全局變量,那麼它在文件範圍之外是不可用的。

然後,全局變量的默認存儲類是什麼?

回答

15

默認存儲時間是靜態的,但默認鏈接是外部的。你不是唯一覺得有點混淆的人。 The C Book(總是一個很好的參考)說:

「你可能會發現的相互作用這些各要素之間 是 既複雜又混亂:這是 因爲他們是」

該報價部分Declarations, Definitions and Accessibility有一個有用的表格(8.1)。最後一行描述了您感興趣的案例。正如它所指出的,沒有存儲類說明符的數據對象具有外部鏈接和靜態持續時間。

+0

但我們將全局定義爲'static int i',並且如果全局變量的默認存儲類是靜態的,那麼它的定義看起來就像'static int i',這意味着內部鏈接。 – 2010-07-19 14:30:55

+0

正如我所說,默認的連接是外部的。靜態的默認值僅適用於持續時間。 – 2010-07-19 14:33:29

+1

要拋出另一個扳手:在C++中,默認情況下,常量對象具有內部鏈接。 – 2010-07-19 15:01:35

16

通常所說的「全局」變量沒有「默認存儲類」。當在命名空間範圍內定義變量時,它始終有靜態存儲時間。沒有辦法改變這種情況,這就是爲什麼「默認」這個概念在這裏不適用的原因。 (和貯存期是它正確調用。)

當您將關鍵字static在命名空間範圍內定義的變量不影響其存儲時間 - 這是靜態已經和它保持不變 - 但它會影響它聯動。關鍵字static更改此類變量從外部(默認)到內部的鏈接。 連鎖是一個單獨的概念,與存儲時間幾乎無關。

相關問題