Nem akarok új topicot nyitni, mert nagyon erősen kapcsolódik a kérdésem a topichoz.
Adott két adatstruktúra, melyek egymásra hivatkoznak, és eltérő header fájlban vannak deklarálva (tekintsünk el attól, hogy ennek így nincs sok értelme):
a.h:
#ifndef A_H
#define A_H
#include "b.h"
struct A
{
struct B *b;
};
#endif
b.h:
#ifndef B_H
#define B_H
#include "a.h"
struct B
{
struct A *a;
};
#endif
Persze ez így nem fog lefordulni, hiszen az egyik headert előbb includeolja a fordító, az includeolja a másik headert, az viszont már nem tudja includeolni az egyiket ezért nem fogja ismerni a benne deklarált struktúrát. Megoldás lenne, ha mindkét headerben a struktúra elé bekerülni egy struct MásikTípus; sor, de ennél jobbat találtam ki. Kódban (az 1. sorok változtak):
a.h:
struct A;
#ifndef A_H
#define A_H
#include "b.h"
struct A
{
struct B *b;
};
#endif
b.h:
struct B;
#ifndef B_H
#define B_H
#include "a.h"
struct B
{
struct A *a;
};
#endif
Vagyis elvileg a struct MásikTípus; akkor is includeolásra kerül, ha a header többi része nem, így a kód lefordulhat. A gond csak az, hogy a gyakorlatban ez nem történik meg. A kérdésem az, hogy miért nem?