2011-03-17 102 views

回答

6

這是GNU風格的初始化語法; open成員初始化爲memory_open,其餘未初始化。 C99使用不同的語法(.open = memory_open)。

+1

沒錯。值得注意的是,這可能是非常古老的代碼:GCC文檔說,舊的GNU風格語法是「自GCC 2.5以來已經過時的」,它於1993年發佈。:-) – Ken 2011-03-17 01:30:37

+2

您確定「未初始化」部分?通常在C中它是全部或全無,即如果至少* something *被初始化,那麼其他一切都是* zero-initialized *。這就是它在C99中的新語法。當然,GCC特定的擴展可以有不同的表現。 – AnT 2011-03-17 01:47:01

+0

我不確定,但我會希望老樣式的初始化方式:全局變量初始化爲0,'auto'(棧)變量將成爲垃圾使用之前的內存空間。 – geekosaur 2011-03-17 01:48:31

3

在C中,可選的尾隨逗號是從時間開始就被允許在大括號初始化符中。正是在那裏,這樣就可以在初始化使用統一的逗號位置像

struct SomeStructType s = { 
    value1, 
    value2, 
    value3, 
}; 

這使得它更容易,例如,以重排列表中的初始化,應這樣的需求出現。無論你是否想使用它都是個人喜好的問題。

至於:語法,它是@geekosaur已經解釋過的GCC特有的擴展。相應的功能在C99中以不同的語法進行了標準化。

+0

那麼你的開始是C99嗎?有趣:)我認爲尾隨逗號(用於初始化和'enum')已被添加。 – 2011-03-17 08:54:38

+0

@Jens Gustedt:沒有。在C99中,尾部逗號特別在* enums *中被允許。他們添加的原因之一是消除了枚舉和大括號初始化符之間古老的不一致性。在後面的逗號允許從開始時間開始,如上所述(至少自C89/90以來),而在enums中,尾隨逗號在C99之前是非法的。 – AnT 2011-03-18 05:37:43

+0

沒錯。我確信我曾經在某個地方讀過這本書,但是在網上搜索並沒有發現任何東西,我的壞處。 – 2011-03-18 07:46:30