PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : typedef - Implementation


Emperor
25.04.2002, 17:17
Bei einer Aufgabe war folgende Schnittstelle gegeben:

typedef struct _BTREE
{
...
} RDNODE



Frage: Warum so umständlich, man könnte doch _BTREE durch RDNODE ersetzten und könnte RDNODE am Ende weglassen. Warum wird solch eine Schreibweise verwendet und hat sie irgendwelche Vorteile?


Jack
25.04.2002, 17:22
Kann es sein, daß dadurch eine Instanz namens RDNODE
vom Typ _BTREE erzeugt wird ?
In dem Fall hättest du Deklaration und Definition in einem
Aufwasch.

Emperor
25.04.2002, 17:37
Ich kann ja mal die gesamte Schnittstelle posten:


typedef struct _BTREE
{

char WORD[WORDLEN];
RDList* list;
_BTREE* left;
_BTREE* right;

} RDNODE;


Wenn ich jetzt eine Instanz davon bilde, muss ich:

RDNODE* node = (RDNODE*)malloc(sizeof(RDNODE));

schreiben, wobei ja nur der Typ interessiert. Ich kann doch aber diesen Typ auch wiefolgt implementieren:

struct RDNODE
{

char WORD[WORDLEN];
RDList* list;
RDNODE* left;
RDNODE* right;

};


wäre des nicht genau dasselbe? Beide mal wird ein neuer Datentyp erstellt. Warum wählt man die "typedef" Variante und nicht die "einfachere" struct Variante?

nj0y
26.04.2002, 13:11
Durch das TYPEDEF wird der Struktur eigentlich nur ein zusätzlicher Name angesprochen, man kann also ein und dieselbe Struktur unter zwei Namen erreichen. Das wird z. B. von der WinAPI häufig verwendet, um Standardfunktionen und Unicode-Funktionen beide zu deklarieren (mit A oder W am Ende) und einmal einen Standardnamen zu definieren (ohne etwas am Ende).

MastaEda
27.04.2002, 16:12
Ich glaub das kommt noch aus C.
Um in C auf die Struktur zuzugreifen müsstest du "struct _Btree" schreiben. Mit Typedef kannst nun diesem "struct _Btree" eine kürzere Schreibweise zuordnen.
In C++ kannst du auch einfach über "_Btree" auf die struktur zugreifen, daher wäre hier typedef unnötig!