( fallen | 2012. 11. 16., p – 08:31 )

Az álmoskönyvek szerint nem túl jó ötlet a guard-on kívülre kódot rakni. A másik nem jó ötlet, hogy a fordítás függ attól, hogy adott include előtt mi van.
Valami ilyesmire van szükséged:

a.h:

#ifndef A_H
#define A_H

struct B;

struct A
{
struct B *b;
};

#endif

És az a.c -ben szerepel az include b.

Szerk.:
Jól tévedek, hogy a header-ben vannak kifejtett függvények, amik használni akarják a másik header-ből jövő struct elemeit?
Ebben az esetben ezert nem működik (tegyük fel, hogy elősször az a.h-t húzza be):

struct A;
struct B;
struct A;

struct B
{
struct A *a;
};

// b.h tovabbi tartalma tartalama

struct A
{
struct B *b;
};

// a.h tovabbi tartalma

Ez azért lesz, mert először behúzza az a.h-t, és itt definiálja is a guard macrót, az a.h behúzza a b.h-t, ami szintén definiálja a saját guard macrójat, a b.h behúzza az a.h-t, de itt már létezik az a guard makrója, ezért innen már csak a 'struct A;' kerül bele.

"If you must mount the gallows, give a jest to the crowd, a coin to the hangman, and make the drop with a smile on your lips" The Wheel of Time series