默認情況下,C static
或extern
中的全局變量是?
如果全局變量默認爲靜態,那麼這意味着我們可以在一個文件中訪問它們,但是我們也可以在不同的文件中使用全局變量。
這是否意味着它們默認具有外部存儲?C中的全局變量是靜態的還是非靜態的?
17
A
回答
30
如果您未指定存儲類別(即,extern
或static
關鍵字),則默認情況下全局變量具有外部鏈接。從C99標準:
3)
§6.2.2的聯繫如果對象或功能的文件範圍標識符的聲明包含存儲類說明
static
,標識符有內部聯繫。5)如果某個函數的標識符聲明沒有存儲類說明符,則它的鏈接就像使用存儲類說明符
extern
聲明一樣。如果對象的標識符聲明具有文件範圍並且沒有存儲類說明符,則其鏈接是外部的。
所以,即使你不指定extern
關鍵字,全局仍可以通過其他源文件訪問(所謂翻譯單元),因爲他們仍然可以有一個extern
聲明相同的變量。如果使用static
關鍵字指定內部鏈接,則即使存在針對另一個源文件中相同變量名的extern
聲明,它也會引用不同的變量。
6
在C,其不具有初始化或任何存儲類說明全局變量是一個變量與靜態存儲持續時間和外部聯動暫定定義。
在翻譯單元中,所有暫定義和最多一個非臨時定義(例如從具有初始化符的聲明中)被摺疊爲變量的單個定義。雖然不允許在多個翻譯單元中定義相同的變量,但它是允許「公共」變量的常見擴展,即對多個翻譯單元中的相同變量的臨時定義。用C
3
全局變量是默認的extern ..(即),他們具有外部連接..
要限制外部聯動,「靜態」存儲類說明可用於全局變量..如果靜態說明符,那麼變量文件範圍。您可以不使用「的extern」關鍵字的其他文件鏈接吧..
指定「靜態」取決於你的程序的用法..
相關問題
- 1. java中的非靜態全局變量
- 2. 是t1靜態還是非靜態?
- 3. Obj-C中的靜態全局變量?
- 4. C++中的靜態和全局變量
- 5. 在非靜態類中鎖定靜態變量是否安全?
- 6. 靜態全局變量V靜態全局類變量
- 7. 全局靜態變量vs函數中的靜態變量?
- 8. 靜態類中的靜態變量和非靜態類中的靜態變量
- 9. Java中的類是靜態還是非靜態?
- 10. 靜態與非靜態變量C++
- 11. 靜態全局變量和靜態局部變量
- 12. 全局靜態/非靜態變量如何在c中被破壞?
- 13. PHP中的全局與靜態變量
- 14. 靜態PHP類中的全局變量
- 15. 內存中的靜態成員和靜態全局變量
- 16. C++中是靜態變量的內部還是外部
- 17. 非靜態類實例中的c#靜態變量的行爲是什麼?
- 18. CPython中的靜態全局變量是否不安全?
- 19. 文件中的全局靜態變量是否與函數中的局部靜態變量相當?
- 20. 是什麼區別靜態和非靜態全局
- 21. C:全局,靜態變量了解
- 22. 錯誤在靜態全局變量(C)
- 23. 靜態方法中的局部變量是否也是靜態的?
- 24. 爲什麼linux內核中的全局變量是靜態的?
- 25. 從C++中的靜態方法訪問非靜態類變量
- 26. C++ 11中的靜態局部變量?
- 27. SASS是動態的還是靜態的?
- 28. Java的android優化。非靜態還是靜態方法?
- 29. 實例中的PHP全局函數中是靜態變量嗎?
- 30. 全局靜態變量的副作用
也與此有關:第6.9.2節,其中描述了暫定的定義;該節的§4明確顯示了文件範圍變量的多重定義如何相互作用 – Christoph 2010-11-21 19:51:30
Thanx先生........你能解釋一下什麼是「靜態外部變量」? – Mishthi 2010-11-21 19:55:32
@Mishthi:你的意思是一個既是靜態又是extern的變量?恐怕這是不可能的。 – 2010-11-21 20:01:56