Anfängerfrage



  • Hallo!

    Ich bin gerade dabei mich in C einzuarbeiten, hierzu möchte ich eine einfache Queue schreiben. Allerdings sind dabei ein paar Fragen aufgetaucht:

    Als erstes, worin liegt der Unterschied zwischen den drei Blöcken:

    typedef struct{
        int wert;
        struct listElem *link;
    } listElem;
    

    bzw:

    struct listElem{
        int wert;
        struct listElem *link;
    };
    
    typedef struct listElem{
        int wert;
        struct listElem *link;
    } listElem;
    

    Wenn ich ersteres nehme bekomme ich in Methoden häufig die Fehlermeldung: "assignment from incompatible pointer type". Muss ich bei der typedef Anweisung dem struct einen Bezeichner mitgeben? Wenn ich letzteres nehme funktioniert alles ohne Murren.

    Wäre dankbar wenn mir hier jemand Klarheit verschaffen könnte!

    Gruss
    Thorsten



    1. ist ein Syntaxfehler, da listElem erst mit dem typedef bekannt wird - innerhalb der struct also unbekannt ist.

    2. wie 3) nur dass man immer struct listElem schreiben muss.

    3. durch das typedef kann man sich das struct sparen.

    Im prinzip sieht es so aus:

    struct foo
    {};
    typedef struct foo foo;
    

    das kann man zusammen fassen:

    typedef struct foo{} foo;
    

    und nun kann man eine anonyme struct erstellen:

    typedef struct /*noname*/ {} foo;
    

    alles klar?


Anmelden zum Antworten