在追逐一个非常不透明的bug时,我一直在努力编译而没有任何警告或错误。我的这部分代码工作得很好,但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仍然警告我)。我将它们添加到此测试中是因为它们看起来在逻辑上合适,但实际上它们会产生错误 - 我不明白。答案 0 :(得分:1)
在某些地方你缺少大括号。具体来说,如果你有一个结构数组,整个数组需要支撑包装;你只是包装每个结构条目。我根据需要添加了大括号,现在工作正常。 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;
}