可能重複:
Does gcc automatically initialize static variables to zero?'靜態' 對象
是靜態聲明保證在函數內部對象與0
初始化?
例如:
int func(void)
{
static int x;
...
}
是否標準的承諾後的func()
第一次調用該x = 0
?
可能重複:
Does gcc automatically initialize static variables to zero?'靜態' 對象
是靜態聲明保證在函數內部對象與0
初始化?
例如:
int func(void)
{
static int x;
...
}
是否標準的承諾後的func()
第一次調用該x = 0
?
簡短的回答,是的。
靜態的未初始化變量駐留在可執行文件的.bss
段中,操作系統在調用main
之前,在程序啓動時分配並將它們歸零。
沒錯。要了解更多可以參考完全相同的問題問前一陣子在這裏:
的C99 Standard說:
5.1.2執行環境
...中的所有對象在啓動程序 之前,初始化(設置爲其初始值)的靜態存儲器應爲 。
而且它也說,與static
限定詞定義一個局部變量具有「靜態存儲」,並在沒有初始化的所有對象採取正確的類型,它們的值0。
是的,它的初始化爲零。但是,使用靜態方法變量根本不是一個好主意。 C#明確避免了混淆,並且已經放棄了對靜態方法變量的支持。
所有的靜態變量存儲在Datasection在存儲部分,所有的變量設置爲默認值。
初始化它仍然是一個好主意。 – Dima 2011-05-04 17:49:15
@迪瑪:一個特殊的原因? – 2011-05-04 17:52:28
這是一個很好的做法,恕我直言。這樣您就不必考慮哪些變量會自動初始化,哪些變量不會自動初始化。假設您以後決定'x'不應該是靜態的,但忘記初始化它,並且該錯誤將是一個極大的痛苦。 – Dima 2011-05-04 17:58:59