Suppose you have to related structures defined in 2 header files like below:
a.h contents:
#include b.h
typedef struct A
{
B *b;
} A;
b.h contents:
#include a.h
typedef struct B
{
A *a;
} B;
In such this case, this recursive inclusion is a problem, but 2 structures must point to other structure, how to accomplish this?
Google C/C++ guidelines suggests:
Don't use an #include when a forward declaration would suffice
That'd mean:
a.h contents:
typedef struct B B;
typedef struct A
{
B *b;
} A;
b.h contents:
typedef struct A A;
typedef struct B
{
A *a;
} B;
If you prefer something a bit safer (but longer to compile) you can do this:
a.h contents:
#pragma once
typedef struct A A;
#include "B.h"
typedef struct A
{
B *b;
} A;
b.h contents:
#pragma once
typedef struct B B;
#include "A.h"
typedef struct B
{
A *a;
} B;