我正在尝试找出一个没有任何文档的程序中发生的事情。这是代码的一部分:
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数组包含两个项目,但它们具有不同数量的条目。这合法吗?
答案 0 :(得分:4)
是的,这是合法的。
未提及的成员将默认初始化为0。
C11标准草案(见第6.19.21节,第141页):
如果括号括起的列表中的初始值设定项少于 元素或聚合的成员,或字符串中较少的字符 literal用于初始化已知大小的数组而不是元素 在数组中,聚合的其余部分应初始化 隐式地与具有静态存储持续时间的对象相同。
答案 1 :(得分:2)
如果聚合的初始化程序太少,则其余的初始化程序将初始化为零。