Ist das Ungarische Notation?!
-
Ein Studienkollege fragt mich da gerade was.
Da gibt es eine Struktur
typedef struct _ipImage { blah blah }
und benutzt wird das Ding mit
ipImage* src;
Meine Frage ist der Unterstrich vor der struct. Hat das was zu bedeuten, oder ist das für nee Unterscheidung, oder wie......
Danke für Eure Antworten und bis denn,
FrankyBoy
-
Hallo,
Das ist ein ganz normaler Bezeichnername (Unterstriche sind in Bezeichnern erlaubt).
Allerdings sollte man einen Bezeichner nicht mit einem Unterstrich beginnen lassen, da Bezeichnernamen mit Unterstrich am Anfang IIRC tlw. auch vom Compiler verwendet werden bzw. für diesen vorbehalten sind.Caipi
-
Hallo,
naja, kommt drauf an was ip sein sollte. Ungarische Notation bedeutet, dass man anhand eines Variablennamens erkennen kann, um was für einen Typ es sich handelt. Wenn ip auf irgendeinen Typ hinweist, würd ich das schon als ungarische Notation bezeichnen. Aber:
1. Sollte man Unterstriche vorne komplett vermeiden:
http://www.gotw.ca/gotw/004.htm2. Ist dein Beispiel falsch, denn es handelt sich um zwei verschiedene Bezeichnungen. Du kannst kein Object diese struct mit ipImage src* erzeugen, wenn dein struct _ipImage heisst.
Wenn es sich um Membervariablen handelt, ist eine von vielen Möglichkeiten diese zu kennzeichnen, ein Unterstrich am Ende der Variablen:
ipImage_
-
CarstenJ schrieb:
naja, kommt drauf an was ip sein sollte. Ungarische Notation bedeutet, dass man anhand eines Variablennamens erkennen kann, um was für einen Typ es sich handelt.
Und das ist hier genau _nicht_ der Fall: er hat einen Präfix am Typnamen, nicht am Variablennamen.
CarstenJ schrieb:
2. Ist dein Beispiel falsch, denn es handelt sich um zwei verschiedene Bezeichnungen. Du kannst kein Object diese struct mit ipImage src* erzeugen, wenn dein struct _ipImage heisst.
Ich vermute, der Originalcode sah so aus:
typedef struct _ipImage { blah blah } ipImage;
Moritz
-
Frage:
typedef struct _ipImage { blah blah } ipImage;
Ich habe so etwas schon öfters in Codeausschnitten gesehen. Ich habe nie verstanden, wieso man das auf diese Weise schreibt, und nicht gleich so:
struct ipImage { blah blah };
Bringt die obere Schreibweise einen Vorteil?
-
schorf2k schrieb:
Frage:
Ich habe so etwas schon öfters in Codeausschnitten gesehen. Ich habe nie verstanden, wieso man das auf diese Weise schreibt, und nicht gleich so:struct ipImage { blah blah };
Bringt die obere Schreibweise einen Vorteil?
Bei der oberen Schreibweise kannst du in C und in C++ den gleichen Code schreiben. Ohne Typedef darfst du in C das struct nicht weglassen...
-
^Omega schrieb:
Ohne Typedef darfst du in C das struct nicht weglassen...
Was meinst du damit? Dass man das "struct" Keyword beim Definieren einer Struktur weglassen kann? Das geht meines Wissens nicht.
-
Nein. In C musste jedes mal, wenn du den Typ benutzt, struct dazu schreiben:
struct foo { int bar; }; // ... void baz(struct foo qux) { printf("%d\n", qux.bar); } struct foo quux;