【问题标题】:What is each curly brace standing for when declaring/initializing a struct? (warning: missing braces around initializer [-Wmissing-braces])声明/初始化结构时,每个花括号代表什么? (警告:初始化器 [-Wmissing-braces] 周围缺少大括号)
【发布时间】:2018-10-31 11:50:35
【问题描述】:

我遇到了以下结构:

static struct {
    unsigned char a[5];
} b[] = {       
        {1,1,1,1,1},
        {2,2,2,2,2}
};

但是,如果正在编译它,我会收到以下警告“警告:初始化器 [-Wmissing-braces] 周围缺少大括号”。

如果我这样改变它:

static struct {
    unsigned char a[5];
} b[] = {       
        {{1,1,1,1,1}},
        {{2,2,2,2,2}}
};

然后警告就消失了。 "b[] = " 之后的每个花括号代表什么? 最里面的花括号明明是?代表char a[5]的初始化。但是其他牙套代表什么?明显地?其他花括号之一必须考虑结构数组 b[] 但哪一个?为什么有,看起来,第三个花括号是必要的,它代表什么?这让我很困惑。

【问题讨论】:

    标签: c struct


    【解决方案1】:
    int a[2] = { 1, 2 };
    

    好的。现在这样:

    int a[2][2] = { { 1, 2 } , { 3, 4 } };
    

    对吗? a[0][0] = 1a[0][1] = 2a[1][0] = 3a[1][1] = 4a[0] 是 memcmp 等于 (int[]){ 1, 2 }a[1] 是 memcmp 等于 (int[]){ 3, 4 }

    现在这个:

    struct {
         int a[2];
    } b = { { 1, 2 } };
    

    所以第一个{}代表结构初始化,内部代表b.a初始化。现在我们创建一个结构数组:

    struct b_s {
         int a[2];
    } b[] = { 
          {
             { 1, 2 },
          },{ 
             { 3, 4, }
          },
    };
    

    所以第一个大括号代表数组b[] 初始化。第二个用于初始化结构b[0]。第三个是初始化b[0].a数组。

    b[0] 是 memcmp 等于 &(struct b_s){ {1, 2 } }b[0].a 是 memcmp 等于 (int[2]){ 1, 2 }b[0].a[0] 等于 1

    【讨论】:

      【解决方案2】:

      每个大括号对应于子对象(聚合对象内的对象,例如数组或结构)的开始。

      b[] 是一个数组,所以第一个大括号引入了数组的元素。

      每个b 都是一个结构,因此下一个大括号引入了该结构的成员。

      b 中的成员 a 是一个数组,因此下一个大括号引入了该数组的元素。

      【讨论】:

        【解决方案3】:

        {1,1,1,1,1} - 数组的五个元素。

        {{1,1,1,1,1}} - 在这种情况下,这就是你如何使用一个包含五个 ints 的数组的字段来初始化结构。

        {{{1,1,1,1,1}}, {{2,2,2,2,2}}} - 这是一个包含两个元素的数组。其中每个元素都是上面提到的结构的一个实例。

        【讨论】:

          【解决方案4】:

          您有一个 array,其中包含 arraysstructs。三对大括号。

          【讨论】:

            【解决方案5】:
            static struct {
                unsigned char a[5];
            } b[] = {                 // array b
                    {                 // struct
                    {                 // array a
                      1,1,1,1,1}},
                    {                 // another struct
                    {2,2,2,2,2}}
            };
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-12-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-11-24
              相关资源
              最近更新 更多