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 结构有更多字段,但我已经为这篇文章简化了它。如果有人能让我知道我做错了什么,我会非常感激。谢谢!

编辑:在我的工作代码中, struct Ccfg E 的初始化程序省略了最里面的大括号,并且工作正常(但 gcc 仍然警告我)。我将它们添加到这个测试中是因为它们看起来在逻辑上是合适的,但它们实际上会产生一个错误——我不明白。

4

1 回答 1

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;
}
于 2015-02-20T20:35:22.997 回答