【发布时间】:2013-07-14 17:53:02
【问题描述】:
typedef struct_t struct_array[ROWS][COLS];
int main()
{
struct_array structArray1 = {0};
}
我收到一个错误,说初始化器周围缺少大括号。我知道关于这个警告有一个 gcc 的错误。还是我做错了什么?
【问题讨论】:
标签: c
typedef struct_t struct_array[ROWS][COLS];
int main()
{
struct_array structArray1 = {0};
}
我收到一个错误,说初始化器周围缺少大括号。我知道关于这个警告有一个 gcc 的错误。还是我做错了什么?
【问题讨论】:
标签: c
您需要使用struct_array structArray1 = {{{0}}};,第一个用于数组的第一维,第二个用于第二维,第三个用于结构初始化。代码是正确的,但是如其他答案中所述,您的 GCC 存在错误。
【讨论】:
0 仅在结构只有一个元素或OP 未使用-Wmissing-field-initializers 时才有效。
您的代码完全正确。你说得对,GCC 也有一个错误 - it's described here。
你有几个选择:
暂时禁用-Wmissing-braces。
使用空的初始化大括号(GCC 扩展):
struct_array structArray1 = {};
初始化一个完整的对象。对于一个三元素struct_t,例如:
struct_array structArray1 = { { { 0, 0, 0 } } };
指定所有必要的大括号和零。假设结构类型与上面 #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 } } };
使用不同的编译器。 clang,也许吧?
修复 GCC 中的错误。
【讨论】:
试试:
int main(){
struct_t structArray[ROWS][COLS];
memset(structArray, 0, sizeof(structArray));
}
(memset 用零填充)
【讨论】:
memset 将它们设置为全零,而不是空指针。