C头文件循环

前端之家收集整理的这篇文章主要介绍了C头文件循环前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有几个头文件,它归结为:

tree.h中:

#include "element.h"

typedef struct tree_
{
    struct *tree_ first_child;
    struct *tree_ next_sibling;
    int tag;
    element *obj;
    ....
} tree;

和element.h:

#include "tree.h"

typedef struct element_
{
    tree *tree_parent;
    char *name;
    ...
} element;

问题是它们都相互引用,所以需要包含tree需要的元素,要包含元素需要的树.

这不起作用,因为定义“树”结构,元素结构必须是已知的,但是要定义元素结构,必须知道树结构.

如何解决这些类型的循环(我认为这可能与’forward declaration’有关系?)?

解决方法

我认为这里的问题不在于失踪的包围守卫,而是两个结构在他们的定义中需要彼此的事实.所以这是一个类型定义汉和蛋问题.

在C或C中解决这些问题的方法是对类型进行远程声明.如果您告诉编译器该元素是某种结构,那么编译器就可以生成一个指向它的指针.

例如.

里面树

// tell the compiler that element is a structure typedef:
typedef struct element_ element;

typedef struct tree_ tree;
struct tree_
{
    tree *first_child;
    tree *next_sibling;
    int tag;

    // now you can declare pointers to the structure.
    element *obj;
};

这样你就不必在tree.h里面加入element.h了.

你也应该把包围守卫放在你的头文件.

猜你在找的C&C++相关文章