unnamed struct?



  • Ich hab das mit der Benennung von Strukturen noch nicht verstanden:

    Warum ist das ein "unnamed strukt" ...

    typedef struct {
    	int	h;
    	double	s;
    	double	v;
    } HSV;
    

    ... und das nicht?

    typedef struct HSV {
    	int	h;
    	double	s;
    	double	v;
    } HSV;
    

    Ich sehe zwar den Unterschied in der Definition, aber ich verstehe es nicht! Was hat es dann für eine Bedeutung hinter der Blockklammer "HSV" anzugeben, wenn die Struktur dann doch "unnnamed" ist. Und wozu braucht man unnamed-structs bzw. named-structs?



  • Also erstmal kannst du das typedef weglassen... Grundlegend:

    struct HSV {
        ...
    };
    

    Damit hast du im Grunde nur eine "Schablone" festgelegt, die an sich noch keinen Speicherplantz benötigt... Mit dieser Schablone kannst du nun Variablen von dem Typ deiner Struktur erzeugen.

    struct HSV a;
    

    Das ist eine Möglichkeit, eine Variable einer Struktur zu definieren.
    Die andere hast du genutzt:

    struct HSV {
        ...
    }a;
    

    Wenn die Struktur einen Bezeichner hat, kannst du eben auch noch später Variablen aus ihr erzeugen, ohne könnte es aber schwierig werden:

    struct {
        ...
    }a;
    

    Ich hoffe du erkennst, warum besonders im zweiten Fall ein typedef unnütz ist 😉

    Mfg,
    Matthias



  • ne, das typedef ist schon sinnvoll.

    es macht aus:
    struct HSV foo;
    ein
    HSV foo;



  • Klar ist es in vielen Fällen sinnvoll, aber in diesem Kontext ja eher überflüssig... Es ging ja auch eher um's grundlegende Verständnis von Strukturen 🙂


Anmelden zum Antworten