2015-05-04 70 views
3

我想問你:靜態結構的元素是否初始化爲零?例如:靜態結構的元素

static struct _radioSettings 
{ 
    unsigned char radio_in; 
    unsigned char radio_out; 
}radioSettings; 

所以這種結構被放置在模塊無線電settings.c 如果radioSettings.radio_in和radioSettings.radio_out不是在編譯我怎麼能初始化它們的模塊無線電裏面設置初始化爲零。 C?

+0

有關更多信息,請參閱http://stackoverflow.com/questions/2091499/why-global-and-static-variables-are-initialized-to-their-default-values – derhoch

回答

2

靜態,在C,是關係到結構的可見度,比它是不能從外部模塊radio-settings.c可見,這並不意味着任何東西。

結構C是初始化爲任何事情。它的字段的值是結構着陸的內存值。所以,你不能指望類似的東西。

如果你想初始化結構,那麼很簡單:

memset(&radioSettings, 0, sizeof(_radioSettings)); 

你只需要放置在一個init()功能爲radioSettings,在模塊內部radio-settings.c

希望這幫助。

+0

不是靜態變量全局變量作爲好?我知道全局變量被初始化爲0? –

+0

靜態變量可以出現在函數內部,是的,作爲模塊中的全局變量(儘管對於其餘模塊不可見)。我不相信任何編程語言爲我初始化我的變量,不管它們的存儲情況如何。你可以看到另一個問題:http://stackoverflow.com/questions/572547/what-does-static-mean-in-a-c-program – Baltasarq

3

所有全局變量都被初始化爲默認值。

節6.7.8 C99標準(n1256)初始化表示:

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

- 如果它有指針類型,它被初始化爲空指針;

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

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

- 如果它是聯合,第一個命名構件(遞歸地)根據這些規則進行初始化。

所以對於你的結構,每個字段被初始化爲它的默認值,也就是。