代码之家  ›  专栏  ›  技术社区  ›  Matt Joiner

如果字段不是由指定的初始值设定项命名,会发生什么情况?

  •  14
  • Matt Joiner  · 技术社区  · 14 年前

    在C99(而不是C++)中,可以使用此语法初始化结构:

    struct info
    {
        char    name[8+1];
        int     sz;
        int     typ;
    };
    
    struct info  arr[] =
    {
        [0] = { .sz = 20, .name = "abc" },
        [9] = { .sz = -1, .name = "" }
    };
    

    未指定的字段会发生什么情况?

    1 回复  |  直到 14 年前
        1
  •  25
  •   kennytm    14 年前

    它们被归零。根据C99标准§6.7.8(初始化)/21,

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