C 如何声明一组具有非线性依赖关系的结构?

C 如何声明一组具有非线性依赖关系的结构?,c,xml,syntax,structure,type-declaration,C,Xml,Syntax,Structure,Type Declaration,我正在研究从XML数据生成C结构,一般来说,C编译器在使用它之前必须有一个定义,这意味着XML文档树必须从它的叶子开始,一直写到它的根 似乎拆分定义/声明不能由类似于函数的结构组成 可以吗 我对XML了解不够,无法知道节点是否可以具有循环关系或一般非线性关系。例如“石头>剪刀”、“剪刀>布”、“布>石头” 我写了一些测试: struct _child { char *child_name; struct _parent *father_reference; }; struct

我正在研究从XML数据生成C结构,一般来说,C编译器在使用它之前必须有一个定义,这意味着XML文档树必须从它的叶子开始,一直写到它的根

似乎拆分定义/声明不能由类似于函数的结构组成

可以吗

我对XML了解不够,无法知道节点是否可以具有循环关系或一般非线性关系。例如“石头>剪刀”、“剪刀>布”、“布>石头”

我写了一些测试:

struct _child
{
    char *child_name;

    struct _parent *father_reference;
};

struct _parent
{
    char *parent_name;

    struct _child *child_reference;
};
如果无序成员是指针,则将其声明为无序似乎可以正常工作(所有ISO标准都符合?),但实际结构无法做到这一点:

struct _child
{
    char *child_name;

    struct _parent father;
};

struct _parent
{
    char *parent_name;

    struct _child *child_reference;
};


main.c:6:17: error: field ‘father’ has incomplete type
  struct _parent father;
                 ^~~~~~
毫不奇怪——在编译时,如何计算对象的大小随其on大小而增长

在将XML定义的数据结构转换为C结构实现时,这会是一个问题吗


在C语言中,结构声明有严格的线性顺序,这是正确的吗?

Ah;你需要提前申报

在顶部附近添加以下声明*:

struct _child;
struct _parent;
一旦给出了这么多,编译器就可以处理指向这些类型结构的指针。然后编译头声明


*一旦您开始使用头文件,这些头文件就在双重include保护之后。现在,把它们放在标准包含之后。

我可以问一下,为什么你用指针指向
,而不是
/
(我想这就是为什么大多数程序员喜欢
)?我想,实际上,如果你想一想,这两个都必须是指针,因为你只想从子对象到父对象,从子对象到父对象。几乎可以肯定的是,你不需要每一本的副本。如果它们都是指针,那么是的,您可以“转发”结构声明并在别处定义它。实际上,这是一种有时用来防止透露实现细节的方法(如OOP中的私有)。