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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.