typedef struct ?



  • Ich habe mal wieder eine kurze Frage .
    Hier der Code

    //C++
    struct Adresse
    {
      int a; 
    }adresse1 ,adresse2; //Deklaration zweier Variablen vom Typ Adresse
    
    Adresse aAdresse; //Deklaration in C++
    
    //C
    struct Adresse
    {
     int a;
    }Variable1,Variable2;
    
    struct Adresse aAdresse; //Bei der Deklaration in C muss struct stehen
    

    Den nächsten Abschnitt finde ich etwas verwirrend.
    Hier sage ich ja das mein struct Adresse heißt , allerdings führt die selbe Anweisung in den vorherigen Code Beispielen dazu dass ich Variablen erzeuge .
    Könnte mir jemand erklären was genau typedef hier tut ?

    typedef struct
    {
     int a;
    
    }Adresse;
    


  • Hier wird auf diese struct ohne Namen getypedeft mit dem Namen 'Adresse' 😉
    Das hat den Vorteil, dass man dann auch in C nur Adresse schreiben muss, und der Code zwischen C und C++ portierbar ist 🙂



  • In C++ ist

    typedef struct
    {
     int a;
    }Adresse;
    

    äquivalent zu

    struct Adresse
    {
     int a;
    };
    


  • Ok ,das war mir schon klar . Aber ich finde die Syntax verwirrend :D.
    Weil normalerweise wird typedef ja so verwendet .

    typedef int Ganzzahl;
    

    Bezüglich eines Structs hatte ich das noch nie gesehen.



  • typedef verlangt als erstes argument was definiertes (oder was jetzt definiert wird) und als zweites argument den alias namen



  • Wie verarbeitet der Compiler denn diese Anweisung.
    Oder von wem genau wird typedef verarbeitet ?

    typedef struct
    {
     int b ;
    }Adresse;
    
    Adresse c; // == struct{int b;}c; ???
    


  • Vicious Falcon schrieb:

    In C++ ist

    typedef struct
    {
     int a;
    }Adresse;
    

    äquivalent zu

    struct Adresse
    {
     int a;
    };
    

    Nein, ist es nicht. Das erste ist ein typedef auf einen anonymen Typen, das zweite ein benannter Typ. Der Unterschied liegt z.B.darin, dass man für das erste keine Vorwärtsdeklaration machen kann.



  • Und bei typeid() wird vermutlich auch was ganz anderes rauskommen.



  • Und die Deklaration " struct Adresse adr; " geht nicht.


Log in to reply