3
typedef struct_t struct_array[ROWS][COLS];

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

}

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

4

3 回答 3

3

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

于 2013-07-14T18:00:52.287 回答
2

你的代码是完全正确的。你说得对,GCC 也有一个错误 -它在此处进行了描述

你有几个选择:

  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. 使用不同的编译器。铿锵声,也许?

  6. 修复 GCC 中的错误。

于 2013-07-14T17:59:51.107 回答
1

尝试:

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

(memset 用零填充它)

于 2013-07-14T17:54:32.760 回答