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



我正在考虑从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;
^~~~~~

这并不奇怪 - 您将如何计算在编译时按其大小增长的对象的大小?

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

说在 C 语言中构造声明有严格的线性排序是否正确?

啊;你需要前向声明。

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

struct _child;
struct _parent;

一旦给定这么多,编译器就可以处理指向这些类型结构的指针。然后编译标头声明。

*一旦开始使用头文件,它们就会紧跟在双重包含保护之后。现在,将它们放在标准包含之后。

最新更新