试图理解这些结构

德克·布鲁尔

我试图弄清楚一个没有任何文档的程序中发生了什么。这是代码的一部分:

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。

C11 标准草案说(在 §6.7.9.21,第 141 页):

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章