2013-02-12 102 views

回答

2

因爲標準要求這是真的。

C99標準§6.7.8.10說:

如果具有自動存儲持續時間的對象沒有被明確初始化,它的值是不確定的。如果具有靜態存儲持續時間的對象未被明確初始化,則:

- 如果它具有指針類型,則將其初始化爲空指針;

- 如果它有算術類型,它被初始化爲(正或無符號)零;

- 如果它是一個聚合,每個成員根據這些規則初始化(遞歸);

- 如果它是一個聯合,根據這些規則初始化(遞歸)第一個命名成員。

+0

Kevin Ballard請你詳細說明你的答案 – 2013-02-12 07:40:25

+0

謝謝Kevin Ballard – 2013-02-12 07:42:35

2

初始化爲0是有意義的 - 它使事情更具可預測性。這個問題應該是「爲什麼堆棧變量不是初始化?」

對此的回答可能是性能 - 初始化堆棧變量需要在每次輸入函數時完成,如果實際上不需要初始化,可能會浪費時間。加載程序時會初始化靜態變量,所以不會花費太多。

1

因爲它們是唯一可以初始化而不會導致運行時性能損失的變量存儲類。

自動存儲類變量(默認值)不會被初始化,因爲它們可能不會被使用。在之內的靜態變量一個函數不能保證被初始化,直到函數被第一次調用。

零是有幾個原因明智一般默認初始化器:它產生一個空字符串字符數組,它啓動一個數組索引數,併產生一個NULL指針等

個人而言,我總是明確初始化靜態甚至歸零。這部分是紀錄片,換句話說,「我真的想要零,不要改變它」。