( BaT | 2012. 11. 16., p – 03:00 )

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?