gcc抱怨初始化器中的大括号(嵌套结构)

时间:2015-02-20 20:07:32

标签: c gcc struct initialization braces

在追逐一个非常不透明的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仍然警告我)。我将它们添加到此测试中是因为它们看起来在逻辑上合适,但实际上它们会产生错误 - 我不明白。

1 个答案:

答案 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;
}