Bezeichner bei typedef struct



  • Hallöchen,

    ich erweitere gerade meine C-Kenntnisse etwas und würde gerne wissen ob es einen signifikanten Unterschied zwischen diesen beiden Deklarationen von Strukturen gibt? Beide funktionieren ja, gibt es einen Grund eine Methode vorzuziehen?

    // typ 1
    typedef struct Bezeichner_
    {
      int var;
    }Bezeichner;
    
    // typ 2 
    typedef struct
    {
      int var;
    }Bezeichner;
    

    Gruß Chris



  • Beim Ersten kannst du sowohl Bezeichner als auch struct Bezeichner_ verwenden. Beim Zweiten kannst du nur Bezeichner verwenden.

    // für Typ 1
    struct Bezeichner_ foo;
    Bezeichner foo1;
    
    // für Typ 2
    Bezeichner foo2;
    


  • Man muss die beiden Bezeichner nicht unterschiedlich wählen, denn

    typedef struct foo {
       int val;
    } foo;
    

    ist vollkommen legal.

    Man kann also struct foo und foo verwenden wie monstermunchkin ja schon sagte. Ersteres ist dann interessant wenn man selbstreferenzierende Strukturen (z.B. Listen) baut.
    Dann kann man das machen:

    typedef struct foo {
       int val;
       struct foo *next;
    } foo;
    

    während:

    typedef struct foo {
       int val;
       foo *next;
    } foo;
    

    nicht gehen würde (man könnte das auch mit forward declaration lösen).



  • Danke euch beiden, durch die Nutzung für Listen etc. macht nun auch für mich die Typ1-Deklaration einen Sinn...


Anmelden zum Antworten