【发布时间】:2012-04-24 17:49:35
【问题描述】:
我在 C 中遇到了循环依赖的问题,我查看了有关此主题的其他问题,但真的找不到答案。
我有第一个名为 vertex 的结构:
#ifndef MapTest_vertex_h
#define MapTest_vertex_h
#include "edgelist.h" //includes edgelist because it's needed
typedef struct
{
char* name;
float x, y;
edgelist* edges;
} vertex;
#endif
第二个结构体是顶点包含的边列表。
#ifndef edgelist_h
#define edgelist_h
#include "edge.h" //include edge, because its needed
typedef struct _edgelist
{
edge** edges;
int capacity, size;
} edgelist;
//...
#endif
然后是最后一个结构,即问题出现的结构,边缘结构被上面的边缘列表包含。
#ifndef MapTest_edge_h
#define MapTest_edge_h
#include "vertex.h" //needs to be included because it will be unkown otherwise
typedef struct
{
float weight;
vertex* destination;
int found;
} edge;
#endif
我尽我所能,转发声明,使用#ifndef、#define 等,但找不到答案。
如何解决这个循环依赖问题?
【问题讨论】:
-
在 C11 中,您可以无害地重复 typedef。您可以在任何或所有标题中写入
typedef struct edge edge;—typedef struct vertex vertex;—typedef struct edgelist edgelist;,然后在相关标题中简单地定义结构类型信息(不带typedef前缀或末尾的名称):@987654330 @ —struct edge { … };—struct edgelist { … };。但是,这在 C99 或 C90 中不起作用;在早期版本的 C 中,为同名定义typedef是一个错误。
标签: c include c-preprocessor circular-dependency