gcc 抱怨初始化器中的大括号(嵌套结构)
gcc complaints about braces in initialiser (nested structs)
在追查一个非常不透明的错误时,我一直试图在没有警告或错误的情况下进行编译。我的这部分代码工作正常,但 gcc 抱怨大括号——它说缺少大括号 和 额外的大括号。我通常会比较草率地初始化,但在这里我尽可能地迂腐地为包含的每个逻辑级别使用大括号。我真正关心初始化的唯一结构是最后一个,Ccfg。我想我会逐步构建它,因为它包含嵌套的其他结构,但显然即使是它前面的结构也根据 gcc 错误初始化。
代码如下:
#define max_nodes 24
struct Cseg
{
int begin;
int arc;
int end;
};
struct Node
{
struct Cseg exit[4];
};
struct Core
{
int num_circles;
int num_nodes;
struct Node node[max_nodes];
};
struct Ccfg
{
struct Core core;
int dummy1;
int dummy2;
};
int main(void)
{
struct Cseg A = {0,1,2};
struct Node B =
{
{0,1,2}, {1,3,0}, {2,-1,3}, {0,-2,1}
};
struct Node C =
{
{0,1,2}, {1,3,0}
};
struct Core D =
{4, 4,
{
{ {0,1,2}, {1,3,0}, {2,-1,3}, {0,-2,1} },
{ {1,3,0}, {2,1,0}, {3,-2,1}, {2,-1,0} },
{ {3,1,2}, {0,1,2}, {1,-3,0}, {2,-3,1} }
}
};
struct Ccfg E =
{
{2, 2,
{
{ {0,1,1}, {0,2,1} },
{ {1,2,0}, {1,1,0} }
}
}
};
return 0;
}
部分初始化不完整;那是故意的。我真正的 ccfg 结构有更多的字段,但我为此简化了它 post。如果有人能让我知道我做错了什么,我将不胜感激。谢谢!
编辑:在我的工作代码中,struct Ccfg E 的初始化程序省略了最里面的大括号,并且工作正常(但 gcc 仍然警告我)。我将它们添加到这个测试中是因为它们在逻辑上看起来是合适的,但它们实际上会产生一个错误——我不明白。
您在某些地方缺少牙套。具体来说,如果您有一个结构数组,则整个数组都需要用大括号包裹起来;你只是包装了每个结构条目。我只是根据需要添加了大括号,现在工作正常。 http://ideone.com/fork/HqxB9R
#define max_nodes 24
struct Cseg
{
int begin;
int arc;
int end;
};
struct Node
{
struct Cseg ex[4];
};
struct Core
{
int num_circles;
int num_nodes;
struct Node node[max_nodes];
};
struct Ccfg
{
struct Core core;
int dummy1;
int dummy2;
};
int main(void)
{
struct Cseg A = {0,1,2};
struct Node B =
{
{ {0,1,2}, {1,3,0}, {2,-1,3}, {0,-2,1} }
};
struct Node C =
{
{ {0,1,2}, {1,3,0} }
};
struct Core D =
{4, 4,
{
{ { {0,1,2}, {1,3,0}, {2,-1,3}, {0,-2,1} } },
{ { {1,3,0}, {2,1,0}, {3,-2,1}, {2,-1,0} } },
{ { {3,1,2}, {0,1,2}, {1,-3,0}, {2,-3,1} } }
}
};
struct Ccfg E =
{
{2, 2,
{
{ { {0,1,1}, {0,2,1} } },
{ { {1,2,0}, {1,1,0} } }
}
}
};
return 0;
}
在追查一个非常不透明的错误时,我一直试图在没有警告或错误的情况下进行编译。我的这部分代码工作正常,但 gcc 抱怨大括号——它说缺少大括号 和 额外的大括号。我通常会比较草率地初始化,但在这里我尽可能地迂腐地为包含的每个逻辑级别使用大括号。我真正关心初始化的唯一结构是最后一个,Ccfg。我想我会逐步构建它,因为它包含嵌套的其他结构,但显然即使是它前面的结构也根据 gcc 错误初始化。
代码如下:
#define max_nodes 24
struct Cseg
{
int begin;
int arc;
int end;
};
struct Node
{
struct Cseg exit[4];
};
struct Core
{
int num_circles;
int num_nodes;
struct Node node[max_nodes];
};
struct Ccfg
{
struct Core core;
int dummy1;
int dummy2;
};
int main(void)
{
struct Cseg A = {0,1,2};
struct Node B =
{
{0,1,2}, {1,3,0}, {2,-1,3}, {0,-2,1}
};
struct Node C =
{
{0,1,2}, {1,3,0}
};
struct Core D =
{4, 4,
{
{ {0,1,2}, {1,3,0}, {2,-1,3}, {0,-2,1} },
{ {1,3,0}, {2,1,0}, {3,-2,1}, {2,-1,0} },
{ {3,1,2}, {0,1,2}, {1,-3,0}, {2,-3,1} }
}
};
struct Ccfg E =
{
{2, 2,
{
{ {0,1,1}, {0,2,1} },
{ {1,2,0}, {1,1,0} }
}
}
};
return 0;
}
部分初始化不完整;那是故意的。我真正的 ccfg 结构有更多的字段,但我为此简化了它 post。如果有人能让我知道我做错了什么,我将不胜感激。谢谢!
编辑:在我的工作代码中,struct Ccfg E 的初始化程序省略了最里面的大括号,并且工作正常(但 gcc 仍然警告我)。我将它们添加到这个测试中是因为它们在逻辑上看起来是合适的,但它们实际上会产生一个错误——我不明白。
您在某些地方缺少牙套。具体来说,如果您有一个结构数组,则整个数组都需要用大括号包裹起来;你只是包装了每个结构条目。我只是根据需要添加了大括号,现在工作正常。 http://ideone.com/fork/HqxB9R
#define max_nodes 24
struct Cseg
{
int begin;
int arc;
int end;
};
struct Node
{
struct Cseg ex[4];
};
struct Core
{
int num_circles;
int num_nodes;
struct Node node[max_nodes];
};
struct Ccfg
{
struct Core core;
int dummy1;
int dummy2;
};
int main(void)
{
struct Cseg A = {0,1,2};
struct Node B =
{
{ {0,1,2}, {1,3,0}, {2,-1,3}, {0,-2,1} }
};
struct Node C =
{
{ {0,1,2}, {1,3,0} }
};
struct Core D =
{4, 4,
{
{ { {0,1,2}, {1,3,0}, {2,-1,3}, {0,-2,1} } },
{ { {1,3,0}, {2,1,0}, {3,-2,1}, {2,-1,0} } },
{ { {3,1,2}, {0,1,2}, {1,-3,0}, {2,-3,1} } }
}
};
struct Ccfg E =
{
{2, 2,
{
{ { {0,1,1}, {0,2,1} } },
{ { {1,2,0}, {1,1,0} } }
}
}
};
return 0;
}