如何在C中转发声明结构



我想将父结构双重链接到子结构。我知道这在C++中有效。

struct child;
struct parent{
child* c;
} ;
struct child{
parent* p;
} ;

,但在带有typedefs的C中,我无法在没有警告的情况下使其工作。

struct child;
typedef struct {
struct child* c;
} parent;
typedef struct {
parent* p;
} child;
int main(int argc, char const *argv[]){
parent p;
child c;
p.c = &c;
c.p = &p;
return 0;
}

给我CCD_ 1。第一个子结构是被覆盖的,还是现在有两个不同的数据结构struct childchild

这在C中可能吗?我的第二个想法是使用void*,并将其投射到任何地方的孩子身上,但到目前为止,任何一种选择都会让我嘴里留下酸味。

您可以声明结构,然后稍后对其进行类型定义:

struct child {
struct parent* p;
};
struct parent {
struct child* c;
};
typedef struct parent parent;
typedef struct child child;
int main(int argc, char const *argv[]){
parent p;
child c;
p.c = &c;
c.p = &p;
return 0;
}

问题在于您有两种不同的结构。第一个是

struct child;

第二个是具有别名子的未命名结构

typedef struct {
parent* p;
} child;

你需要写

typedef struct child {
parent* p;
} child;

您可以声明这样的结构:

typedef struct parent {
struct child* c;
}parent;
typedef struct child {
parent* p;
}child;
int main(int argc, char const *argv[])
{
parent p;
child c;
p.c = &c;
c.p = &p;
return 0;
}

最新更新