试图理解这些结构

时间:2017-04-10 09:31:03

标签: c arrays

我正在尝试找出一个没有任何文档的程序中发生的事情。这是代码的一部分:

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数组包含两个项目,但它们具有不同数量的条目。这合法吗?

2 个答案:

答案 0 :(得分:4)

是的,这是合法的。

未提及的成员将默认初始化为0。

C11标准草案(见第6.19.21节,第141页):

  

如果括号括起的列表中的初始值设定项少于   元素或聚合的成员,或字符串中较少的字符   literal用于初始化已知大小的数组而不是元素   在数组中,聚合的其余部分应初始化   隐式地与具有静态存储持续时间的对象相同。

答案 1 :(得分:2)

如果聚合的初始化程序太少,则其余的初始化程序将初始化为零。