C递归头文件包含问题?

假设您必须在2个头文件中定义相关结构,如下所示:

啊内容:

#include bh typedef struct A { B *b; } A; 

bh内容:

 #include ah typedef struct B { A *a; } B; 

在这种情况下,这种递归包含是一个问题,但是2个结构必须指向其他结构,如何实现呢?

Google C / C ++指南建议 :

当前向声明足够时,不要使用#include

那意味着:

啊内容:

 typedef struct BB; typedef struct A { B *b; } A; 

bh内容:

 typedef struct AA; typedef struct B { A *a; } B; 

如果你喜欢更安全的东西(但编译时间更长),你可以这样做:

啊内容:

 #pragma once typedef struct AA; #include "Bh" typedef struct A { B *b; } A; 

bh内容:

 #pragma once typedef struct BB; #include "Ah" typedef struct B { A *a; } B; 

不要#include啊和bh,只需向前声明A和B.

啊:

 struct B; //forward declaration typedef struct A { struct B * b; } A; 

BH:

 struct A; //forward declaration typedef struct B { struct A * a; } B; 

您可能想要考虑类的紧密耦合程度。 如果它们非常紧密耦合,那么它们可能属于同一个标题。

注意:你需要在.c文件中#include ah和bh来执行a->b->a

您只预先定义了结构,这样您仍然可以声明一个指针:

ah

 typedef struct B_ B; typedef struct A_ { B *b; } A; 

请注意我如何为typedef和struct标签使用单独的名称,以使其更清晰。

这将在C中削减它:

 typedef struct BB; typedef struct AA; struct A { B *b; }; struct B { A *a; }; 

您可以根据需要重新排列BA