2017-04-10 60 views
1

我正試圖解決沒有任何文檔的程序中發生的情況。以下是部分代碼:試圖瞭解這些結構

typedef struct 
{ 
    UInt8 Access; 
    UInt8 PDOMapping; 
    UInt8 Size; 
    void* Data; 
    CheckValue Check; 
    AccessEvent ReadEvent; 
    AccessEvent WriteEvent; 
}ObjectValue; 

typedef struct 
{ 
    UInt16   Index; 
    UInt8   Code; 
    ObjectValue* Value; 
}Object; 

const UInt8 MaxSubIndex6400 = 1;  
ObjectValue Object6400Value[] = 
{ 
    {ACCESS_RO, MAP_NONE, 1, (void*)&MaxSubIndex6400, null, null}, 
    {ACCESS_RO, MAP_NONE, sizeof(Index6400Buffer), (void*)&Index6400Buffer, null, null, null}, 
}; 

Object6400Value的數組包含兩個項目,但它們具有不同數量的條目。這合法嗎?

+1

什麼是'null'? – unwind

+1

啊;我看到第一項沒有WriteEvent的初始化工具。如果我記得清楚,那麼沒有提供任何初始化程序將導致初始化爲零。 –

+1

是的,因爲隔離一個'ObjectValue'項目的''}''。未初始化的成員都是「0」。 – LPs

回答

4

是的,這是合法的。

非提到成員將只是默認初始化爲0

的C11標準草案說,(在§6.7.9.21,第141頁):

如果有更少的初始化一個大括號包含的列表,比 元素或聚合的成員或字符串中的字符數少 用於初始化數組的已知大小的數組,但數組中的元素爲 ,聚合的其餘部分應初始化 隱含地與具有靜音的對象相同c存儲時間。

+0

是的,除了這是在2010年和更早的時候寫的(顯然)。多重嵌套結構,函數指針,變量名 - 它們都沒有記錄。惡夢 –

2

如果聚合的初始化者太少,其餘的初始化爲零。