【问题标题】:how do I initialize an struct type of array?如何初始化结构类型的数组?
【发布时间】:2013-07-14 17:53:02
【问题描述】:
typedef struct_t struct_array[ROWS][COLS];

int main()
{
    struct_array structArray1 = {0};

}

我收到一个错误,说初始化器周围缺少大括号。我知道关于这个警告有一个 gcc 的错误。还是我做错了什么?

【问题讨论】:

    标签: c


    【解决方案1】:

    您需要使用struct_array structArray1 = {{{0}}};,第一个用于数组的第一维,第二个用于第二维,第三个用于结构初始化。代码是正确的,但是如其他答案中所述,您的 GCC 存在错误。

    【讨论】:

    • 我没有说不是,我只是提出了一个解决方案:)
    • 好吧,不接受正确的代码不会使任何事情或多或少变得宽容,它会导致错误
    • 恰好这个答案通过了我公司的编译器!
    • 单个0 仅在结构只有一个元素或OP 未使用-Wmissing-field-initializers 时才有效。
    【解决方案2】:

    您的代码完全正确。你说得对,GCC 也有一个错误 - it's described here

    你有几个选择:

    1. 暂时禁用-Wmissing-braces

    2. 使用空的初始化大括号(GCC 扩展):

      struct_array structArray1 = {};
      
    3. 初始化一个完整的对象。对于一个三元素struct_t,例如:

      struct_array structArray1 = { { { 0, 0, 0 } } };
      
    4. 指定所有必要的大括号和零。假设结构类型与上面 #3 相同,并且是一个 2x2 数组:

      struct_array structArray1 = { { { 0, 0, 0 }, { 0, 0, 0 },
                                      { 0, 0, 0 }, { 0, 0, 0 } },
                                    { { 0, 0, 0 }, { 0, 0, 0 },
                                      { 0, 0, 0 }, { 0, 0, 0 } } };
      
    5. 使用不同的编译器。 clang,也许吧?

    6. 修复 GCC 中的错误。

    【讨论】:

      【解决方案3】:

      试试:

      int main(){
          struct_t structArray[ROWS][COLS];
          memset(structArray, 0, sizeof(structArray));
      }
      

      (memset 用零填充)

      【讨论】:

      • 这不是问题的真正答案。
      • 嗯,这个在技术上是不可移植的。如果结构包含指针会发生什么? memset 将它们设置为全零,而不是空指针。
      • 啊,k,其实不知道
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多