2012-10-31 40 views

回答

28

靜態限制變量的範圍相同translation unit
A static global variable has internal linkage
A 非靜態全局變量有外部聯動

良好閱讀:
What is external linkage and internal linkage?

+0

如果一個非靜態的全局有外部鏈接,那麼'extern'有什麼用? – rubenvb

+0

@rubenvb:你的Q的答案在鏈接內部進行詳細解釋。 –

+2

@rubenvb'extern'意味着它是一個聲明而不是一個定義,就像函數的原型一樣。 –

7

全局static變量只在翻譯單元(即源文件)變量是在非靜態全局變量可以從其他引用可用。源文件。

+3

更具體地說:使用'static'可以防止鏈接器從該翻譯單元中導出符號。 – cdhowie

1

全球非靜態變量是從其他文件accessable而靜態全局變量不

+1

當然,他們是通過指針「訪問」。他們只是「不能用其他翻譯單位的名稱來引用」(§3.5)。 – dyp

+1

@DyP我認爲Rahul顯然意味着這個變量不能被它的名字訪問。 – Pavel

3

如果你不知道其中的差別是什麼,正確的答案可能會變得更加令人困惑你。簡而言之,一個類的static s不能在文件範圍內實現靜態。類的靜態與常規變量本質上相同,但它們必須通過在類名前加前綴來引用。文件範圍內的靜態文件只是文件本地的常規變量。爲了理解這意味着什麼,嘗試將兩個具有相同名稱的變量添加到單個項目中。你會得到鏈接錯誤,因爲有多個相同的符號。通過將符號設爲靜態,您將避免該問題,並且變量的名稱將無法從文件外部訪問。