Seite 1 von 1

struct und typedef

Verfasst: So Dez 30, 2012 7:50 am
von bowie_22
Hallo Zusammen,

bin gerade dabei mit ein passende Kodierrichtlinie zu suchen.
Linux-Kernel erscheint mir kurz und knackig und ich gehe mal davon aus, dass die wissen von was sie reden.

http://www.kernel.org/doc/Documentation/CodingStyle

An einer Stelle bin ich allerdings unsicher.
Die Linux-Kernel Richtlinie rät davon ab für struct ein typedef zu verwenden.
In general, a pointer, or a struct that has elements that can reasonably
be directly accessed should _never_ be a typedef.
Andere Quellen meinen typedef verbessert die Lesbarkeit des Codes. Ich würde zu Letzterem tendieren, frage mich aber warum die Linux Fraktion sich gegen typedef für structs ausspricht.
Hat da jemand mal eine Einschätzung?

Danke!

Re: struct und typedef

Verfasst: So Dez 30, 2012 11:18 am
von Xin
bowie_22 hat geschrieben:Andere Quellen meinen typedef verbessert die Lesbarkeit des Codes. Ich würde zu Letzterem tendieren, frage mich aber warum die Linux Fraktion sich gegen typedef für structs ausspricht.
Hat da jemand mal eine Einschätzung?
Wenn Du typedef verwendest, legst Du einen neuen Typ an. Damit hast Du zwei Typen. Du müllst den Namensraum zu.
Wenn Du in einer IDE arbeitest, kommst Du bei der Typsuche auf den Typedef, dann von da aus auf die Struct. Das nervt, besonders, wenn Du einen Member verfolgst, der ebenfalls ein typedef ist.
Damit die typedefs funktionieren, musst Du Includes einbinden. Das ist bei "struct bla *" nicht erforderlich.

Wenn es darum geht, dass Du "struct" nicht schreiben möchtest, kompiliere mit C++.
Typedef ist sehr selten sinnvoll, als Positivbeispiel würde ich Funktionspointer nehmen.

Re: struct und typedef

Verfasst: So Dez 30, 2012 4:42 pm
von bowie_22
Ok, danke für die mal wieder sehr kompetente Antwort.
Dann bleibe ich bei den "Linuxern"

Re: struct und typedef

Verfasst: Mi Jan 16, 2013 5:12 pm
von mfro
Ein weiterer Grund dürfte sein: damit man sieht, daß ein struct ein struct ist. Daß das sinnvoll ist, sehen auch viele typedef-Anhänger ein und schreiben dann:

Code: Alles auswählen

typedef struct xxx xxx_struct;  // oder ähnlich
nur um dann statt

Code: Alles auswählen

struct xxx

Code: Alles auswählen

xxx_struct
schreiben zu können, was ziemlich offensichtlich ziemlicher Blödsinn ist ;)