Problem mit Reihenfolge von typedef struct

09/03/2009 - 13:52 von hweede | Report spam
Hi,

Folgendes Problem stellt sich mir in einem Header-File eines
ziehmlich großen Projekts, woran zwei Partner-Firmen arbeiten:

Ich hab mir erst seit kurzem angewöhnt, Datenstrukturen
nicht mehr mit

struct _structname_
{
...
};
#define STRUCTNAME struct _structname_

sondern mit

typedef struct Structname
{
...
};

zu deklarieren. Nun hab ich das Problem: Wenn Membervariablen
eines (selbstgebastelten) Structs vom Typ eines anderen (selbstgebastelten)
Structs sind, kann ich das nur realisieren, wenn die Deklarationen in der
Reihenfolge angeordnet sind, dass immer nur selbstgebastelte Typen verwendet
werden, die weiter oben deklariert sind. Gibt es einen Trick,
diese Zwangsreihenfolge zu vermeiden, also die Möglichkeit zu
bewahren, eine beliebige Reihenfolge zu verwenden?
Ich hab nàmlich Angst, dass sich "die Katze in den Schwanz beisst"
wenn zwei Deklarationen sich gegenseitig brauchen, und ausserdem möchte ich
gerne selber (nach dem Kriterium der Verstàndlichkeit und
Übersichtlichkeit) entscheiden, in welcher Reihenfolge meine Structs
deklariert sind. Ich hoffe, hier ist "deklarieren" und nicht "definieren"
der richtige Terminus.

Làsst sich das Problem vielleicht mit dieser mysteriösen (und mir nicht gelàufigen)
Pràprozessor-Anweisung

#pragma

lösen?

Eine Notlösung hab ich bisher verwendet: Membervariablen, die
eigentlich Pointer auf einen selbstgebastelten Typ sein sollten,
stattdessen als Pointer auf void deklarieren. Leider mag die andere
Firma (Partner des Verbundprojekts) dies nicht und meckert darüber,
denn man müsste dann immer Cast-Operatoren schreiben wenn man drauf
zugreift, das ist sehr unbequem.

Danke
Henning
 

Lesen sie die antworten

#1 Achim Peters
09/03/2009 - 14:10 | Warnen spam
Henning Weede schrieb:
typedef struct Structname
{
...
};

zu deklarieren.



Du meinst

typedef struct
{
...
} Structname;

bzw.

typedef struct Structname
{
...
} Structname;

?

Nun hab ich das Problem: Wenn Membervariablen
eines (selbstgebastelten) Structs vom Typ eines anderen (selbstgebastelten)
Structs sind, kann ich das nur realisieren, wenn die Deklarationen in der
Reihenfolge angeordnet sind, dass immer nur selbstgebastelte Typen verwendet
werden, die weiter oben deklariert sind. Gibt es einen Trick,
diese Zwangsreihenfolge zu vermeiden, also die Möglichkeit zu
bewahren, eine beliebige Reihenfolge zu verwenden?



typedef struct Structname1 Structname1;
typedef struct Structname2 Structname2;

struct Structname1 {
...
Structname2 *x;
...
}

struct Structname2 {
...
Structname1 *y;
...
}

HTH

Bye
Achim

Ähnliche fragen