簡體   English   中英

C中的全局變量是靜態的還是不是?

[英]Global variables in C are static or not?

默認情況下,C staticextern的全局變量是?
如果全局變量默認是static那么它意味着我們可以在單個文件中訪問它們,但我們也可以在不同的文件中使用全局變量。
這是否意味着默認情況下它們具有extern存儲?

如果未指定存儲類(即externstatic關鍵字),則默認情況下全局變量具有外部鏈接。 從C99標准:

§6.2.2標識符的鏈接

3)如果對象或函數的文件范圍標識符的聲明包含存儲類說明符static ,則標識符具有內部鏈接。

5)如果函數的標識符聲明沒有存儲類說明符,則確定其鏈接與使用存儲類說明符extern聲明的鏈接完全相同。 如果對象的標識符聲明具有文件范圍而沒有存儲類說明符,則其鏈接是外部的。

因此,即使您沒有指定extern關鍵字,仍然可以通過其他源文件(所謂的轉換單元 )訪問全局變量,因為它們仍然可以對同一變量進行extern聲明。 如果使用static關鍵字指定內部鏈接,那么即使在另一個源文件中存在相同變量名的extern聲明,它也會引用另一個變量。

在C中,沒有初始化程序或任何存儲類說明符的全局變量是具有靜態存儲持續時間外部鏈接的變量的暫定定義。

在翻譯單元中,所有暫定定義和最多一個非暫定定義(例如,來自具有初始化器的聲明)被折疊成變量的單個定義。 雖然不允許在多個翻譯單元中定義相同的變量,但它是允許“共同”變量的常見擴展,即在多個翻譯單元中對同一變量的暫定定義。

C中的全局變量默認為extern ..(即)它們具有外部鏈接..

要限制外部鏈接,可以將'static'存儲類說明符用於全局變量。如果使用靜態說明符,則變量具有文件范圍..您不能使用'extern'關鍵字將其鏈接到其他文件中。 。

指定'static'取決於您對程序的使用情況..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM