在追查一个非常不透明的错误时,我一直在尝试编译时没有警告或错误。我的这部分代码运行良好,但 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 结构有更多字段,但我已经为这篇文章简化了它。如果有人能让我知道我做错了什么,我会非常感激。谢谢!
编辑:在我的工作代码中, struct Ccfg E 的初始化程序省略了最里面的大括号,并且工作正常(但 gcc 仍然警告我)。我将它们添加到这个测试中是因为它们看起来在逻辑上是合适的,但它们实际上会产生一个错误——我不明白。