who*_*hoi 6 c recursion header include
假设您必须在 2 个头文件中定义相关结构,如下所示:
啊内容:
#include b.h
typedef struct A
{
B *b;
} A;
Run Code Online (Sandbox Code Playgroud)
bh内容:
#include a.h
typedef struct B
{
A *a;
} B;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这种递归包含是一个问题,但是2个结构必须指向其他结构,如何实现这一点?
不要#include ah 和 bh,只需前向声明 A 和 B。
啊:
struct B; //forward declaration
typedef struct A
{
struct B * b;
} A;
Run Code Online (Sandbox Code Playgroud)
乙:
struct A; //forward declaration
typedef struct B
{
struct A * a;
} B;
Run Code Online (Sandbox Code Playgroud)
您可能需要考虑这些类的耦合程度。如果它们耦合得非常紧密,那么它们可能属于同一个标头。
注意:您需要#include在文件中同时使用 ah 和 bh.c才能执行a->b->a.
当前向声明就足够时,不要使用#include
那意味着:
啊内容:
typedef struct B B;
typedef struct A
{
B *b;
} A;
Run Code Online (Sandbox Code Playgroud)
bh内容:
typedef struct A A;
typedef struct B
{
A *a;
} B;
Run Code Online (Sandbox Code Playgroud)
如果您喜欢更安全的东西(但编译时间更长),您可以这样做:
啊内容:
#pragma once
typedef struct A A;
#include "B.h"
typedef struct A
{
B *b;
} A;
Run Code Online (Sandbox Code Playgroud)
bh内容:
#pragma once
typedef struct B B;
#include "A.h"
typedef struct B
{
A *a;
} B;
Run Code Online (Sandbox Code Playgroud)