Strukturen die sich gegenseitig einbinden/referenzieren

Gast #2388711
Lesenswert?

Hi Leute,

ich habe folgendes Problem beim kompilieren in CodeWarrior.
1
typedef struct
2
{
3
   STRUKTUR1 *refAufTypStruktur1;
4

5
} Sub_Struct ;
6

7

8
typedef struct
9
{
10
   Sub_Struct subStruct;
11

12
} STRUKTUR1;

Problem ist, dass das typedef von STRUKTUR1 zwar funktioniert da 
Sub_Struct bereits bekannt ist, jedoch das typedef von Sub_Struct nicht, 
da hier STRUKTUR1 noch nicht bekannt ist.

Gibt es sowas wie ein typedef struct Prototyp oder so?
Gast #2388742
Lesenswert?

Wozu das gut sein soll?!

Hab ich mir nicht ausgedacht! Programmiere nach einer 
Autosar-Spezifikation. Dabei geht es um ein Konfigurationsstruktur, die 
jedoch weitaus größer aufgezogen ist. Da referenziert auch nicht eine 
Struktur auf eine andere sondern es schließen ca. 5 oder mehr Strukturen 
den Kreis.

An unterschiedlichen Stellen sind unterschiedliche Informationen 
bekannt. Aus diesen muss dann schlussendlich wieder auf andere 
Informationen geschlossen werden. Dabei können die Strukturen sowie 
Treiber ausgetauscht werden... So wird viel mit referenzen etc. 
gearbeitet.

Man könnte das sicherlich auch anders lösen, jedoch sind die Referenzen 
bei der gewählten Architektur Sinnvoll, da ich anders nicht an die 
Informationen rankomme. Wieso die Architektur gerade so gewählt wurde 
versteh ich auch noch nicht so 100%ig macht jedoch immer mehr Sinn.
Gast #2388744
Lesenswert?

Nö. Muss er nicht, da ein "pointer" innerhalb eines Systems immer eine 
bekannte Größe hat (bei 32-Bit Architekturen sollten das 4 Byte sein).

Er will nur eine Deklaration der Struktur haben, auf die er zeigen soll.
Theoretisch könntest Du auch "void * struktur" schreiben. Allerdings 
darfste dann bei jedem Zugriff auf das Teil einen expliziten typecast 
durchführen
(sowas kann VIEL Schreibaufwand werden).
#2388752
Lesenswert?

Thomas Frosch schrieb:

> Da referenziert auch nicht eine
> Struktur auf eine andere sondern es schließen ca. 5 oder mehr Strukturen
> den Kreis.

Ist so ungewöhnlich nicht. Darüber stolpert man ansatzweise bereits, 
wenn eine Struct einen Pointer auf den eigenen Typ enthält, also 
beispielsweise eine verkettete Liste implementiert wird. Denn schon dort 
steht der Name eines Typedefs lexikalisch hinter der Verwendung.

Historischer Hintergrund hiervon ist, dass es anfangs keine Typedefs 
gab, man stets mit "struct X" arbeitete, und dann hat man zumindest bei 
der selbstreferenziellen Methode kein Problem. Für den Rest bestand 
damals bereits die Möglichkeit, mit "struct X" Strukturen zu benennen, 
deren Inhalt nicht bekannt ist, was mangels bekannter Grösse natürlich 
nur im Zusammenhang mit Pointern sinnvoll ist.

Die erste Zeile in meinem Beispiel hat übrigens nur dokumentarischen 
Charakter. Es geht auch ohne. Aber sie offenbart dem Leser, dass diese 
Struct noch kommen wird, vergleichbar dem Prototype einer Funktion.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren