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