mikrocontroller.net

Forum: Compiler & IDEs Problem mit cross-reference


Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Das Problem, was ich habe ist, dass zwei Strukturen jeweils Zeiger auf 
die jeweils andere Struktur haben:
struct tStruct1
{
    struct tStruct2* pStruct2;
};

struct tStruct2
{
    struct tStruct1* pStruct1;
};

Alles kein Problem, WENN man vor die Deklaration von tStruct1 folgendes 
voranstellt:
struct tStruct2;

Mein Problem ist aber, dass ich anynome Structs im Zusammenhang mit 
Typedefs benutze (Ist hiervon eigentlich abzuraten aus irgendwelchen 
Gründen?)
typedef struct
{
    tStruct2* pStruct2;
}tStruct1;

typedef struct
{
    tStruct1* pStruct1;
}tStruct2;

Was stelle ich jetzt voran?
typedef struct tStruct2;
funktioniert jedenfalls nicht:
warning: useless storage class specifier in empty declaration
typedef tStruct2;
auch nicht. Redefinition wg. Default int.

Autor: Roland Riegel (roland) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Simon,

Du musst in diesem Fall den Structs selbst auch Namen geben, anders 
gehts nicht:
struct tStruct2_tag;

typedef struct tStruct1_tag
{
    struct tStruct2_tag* pStruct2;
} tStruct1;

typedef struct tStruct2_tag
{
    struct tStruct1_tag* pStruct1;
} tStruct2;

bzw. auch:
struct tStruct2_tag;

struct tStruct1_tag
{
    struct tStruct2_tag* pStruct2;
};

struct tStruct2_tag
{
    struct tStruct1_tag* pStruct1;
};

typedef struct tStruct1_tag tStruct1;
typedef struct tStruct2_tag tStruct2;

Gruß,
Roland

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok. Habe ich mir gedacht. Ich denke gerade darüber nach der Konsistenz 
halber das mit den "typedef struct"s zu vergessen und stattdessen 
einfach bei Definitionen jedesmal struct davorzuschreiben.

Danke für die Antwort ;)

Autor: Roland Riegel (roland) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal,

Genau meine Meinung. Bei structs und enums verwende ich auch keine 
typedefs, ist mir einfach zu blöd. Und die sechs Buchstaben extra (inkl. 
Leerzeichen) tun auch nicht weh, die tippt man blind.

Gruß,
Roland

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.