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; };
您可以根据需要重新排列B
和A