2009-08-18 88 views

回答

36

是 - C標準ISO/IEC 9899:1999又名C99(和C++)的標準說,這一定是這樣。請參閱WG14 N1256的第6.7.8節(「初始化」)中的第10項準確的文本。

正如其他人所指出的那樣,這是很好的做法,總是初始化靜態變量:

static int idx = 0; 

之所以這樣做,這不是因爲一些編譯器可能不總是初始化靜態變量零(失敗的編譯器做這樣的初始化將會終止,並且不能聲稱是C或C++編譯器),那就是說出你的意思 - 可能是最基本的編程規則。

+1

然後再一次...反對顯式初始化靜態變量的參數是它擴展了可執行文件的大小,因爲它們不再存在於.bss中。 – ephemient 2009-08-18 16:17:29

+4

我不明白爲什麼應該如此。編譯器可以很容易地忽略顯式的零初始化。 – 2009-08-18 16:21:46

+3

實現細節。 GCC 4.2和MSVC 7.1確實似乎將'static int a;'和'static int a = 0;'等價處理。我記得編譯器沒有,但我似乎手頭上沒有足夠的... – ephemient 2009-08-18 18:19:13

3

雖然標準說是的...良好的做法表明,你應該總是初始化變量。你永遠不知道什麼時候你改變編譯器,或者不得不在另一臺機器上編譯它,你想盡量減少意外行爲的可能性。

+5

而且這也使未來的開發人員清楚,您需要的價值爲零。 – Edd 2009-08-18 15:55:49

+0

@Edd,它確實。 – AAA 2009-08-18 15:57:16

+5

double somethingImportant() { static double arr [1024 * 1024]; ... } 每個成員的顯式初始化可能有點困難。如果你有一個標準的編譯器,它將根據定義進行初始化。如果你不能依賴像編譯器那樣基本的東西,那麼得到另一個編譯器是因爲你將難以推理任何代碼。 – 2009-08-18 16:00:53