_t und m_ und so...
-
Servus,
wenn man sich durch fremden Code durchwühlt, findet man manchmal eigenartige Namensgebung für Variablen.
Manche davon kommen jedoch relativ häufig vor, daher würd ich gern mal wissen, was für eine allgemeine Bedeutung das Suffix _t hat? Manchmal scheint es als würde es einfach "type" bedeuten, aber falls das so ist, wozu?
Ein m_ als Präfix habe ich auch schon entdeckt, sieht verdächtig nach "Member" aus.
Was sind denn so die gängigsten Prä-/Suffixe, und welche Bedeutung haben sie? Bekannt sind mir so Dinge wie wnd für Window, hnd oder h für Handle und ptr bzw. p für Pointer. Aber ich denke mal, es gibt da noch so einiges, was man hier mal zusammentragen könnte, schließlich verbessert dies das Verständnis beim Lesen von fremdem Code...
-
Hallo
Google mal nach ungarischer Notation und dann kannste dir auch gleich 10000 Flamewars von wegen Vor- und Nachteilen durchlesen.
chrische
-
da muss man gar nich lang diskutieren, es ist schlicht quatsch

-
Hallo
auf geht's: sehe ich genauso und jeder der etwas anderes behauptet, hat keine Ahnung.

chrische
-
Naja aber fällt denn sämtliches oben erwähntes unter "ungarische Notation"? Ich dachte, bei ungarischer Notation wird der Datentyp vorne als Buchstabe angegeben, z.B. iZahl = int Zahl usw.
Das _t dagegen hab ich bisher nie im Zusammenhang mit ungarischer Notation entdeckt, und daher ist mir nach wie vor schleierhaft, was das wohl bedeuten soll. Wenn es tatsächlich für "type" steht, dann ist es erstens total überflüssig, aber zweitens frage ich mich dann auch, warum es wchar und wchar_t gibt (glaube zumindest, daß beides vorhanden ist)?
-
und genau das ist mit nen grund, warum das ganze so bekloppt ist.
zum einen ist es "fehleranfällig". man muss ständig drauf achten (bei ungarischer notation), dass man bei typänderung auch ja den namen korrekt (und überall) ändert. zum anderen muss der leser im kopf haben, was man mit dem ganzen geschreibsel meint.
ein angehängtes _t kann alles mögliche bedeuten. vielleicht, dass es nen template typ ist? oder ein primitiver typ? oder... irgendwas?

-
Die ungarische Notation ist das nicht. Es gibt viele Notationen. Kann jeder so machen, wie er will.
Soweit ich weiß, wurde die ungarische Notation von einem ungarischen MS-Mitarbeiter eingeführt, weil er damals kein englisch konnte und so die Kollegen ihn "verstehen" konnten. Also, alles schon sehr strange... heute in der Welt der Generik, Polymorphie und der Tooltips in IDEs ist sowas sicherlich nicht mehr wirklich sinnvoll. Aber jeder wie er will und besser arbeiten kann.
Das _t steht wohl einfach für typedefs. wchar_t war damals auch erst ein typedef. Heute ist es build-in. Aber wird wohl einfach für primitiver typ stehen.
-
Ja, '_t' steht wirklich für 'type' und wurde bei den Standard-C-Libraries eingeführt und dann auch teilweise von C++ übernommen, z.B. size_t, wchar_t etc.
Einfach, um Variablennamen von Typnamen zu unterscheiden...
-
Th schrieb:
Ja, '_t' steht wirklich für 'type' und wurde bei den Standard-C-Libraries eingeführt und dann auch teilweise von C++ übernommen, z.B. size_t, wchar_t etc.
Einfach, um Variablennamen von Typnamen zu unterscheiden...... was aber noch nicht automatisch bedeutet, dass es gut ist.

Gruß,
Simon2.
-
Artchi schrieb:
Soweit ich weiß, wurde die ungarische Notation von einem ungarischen MS-Mitarbeiter eingeführt, weil er damals kein englisch konnte und so die Kollegen ihn "verstehen" konnten.
Bullshit! Auf was für Ideen die Leute kommen nur um Microsoft in die Pfanne zu hauen - herrlich.
Nieder mit der ungarischen Notation!!!!!! Brennt sie nieder

-
die ungarische notation wurde von einem microsoft mitarbeitet erfunden
dass er kein englisch konnte, stell ich allerdings mal in den bereich der gerüchte.
-
Man darf nciht vergessen wann und warum ungarische Notation benutzt wurde (Hinweis: Vergangenheitsform)
Damals hatte man bestenfalls einen simplen Texteditor mit 80x40 Zeichen Darstellungsbereich zur Verfügung stehen. Kein INtellisense, keine IDEs, gar nix in der Art.
Hinzu kommt das im alten C alle Variablen immer am Anfang des Blocks definiert werden mußten. Traf man also irgendwo weiter unten auf eine variable X und wolle wissen was es war, dann mußte man sich mühselig auf die Suche begeben.
Heute ist das einfacher... Man hovered mit der Maus drüber und das wars
(Ich gebs zu, bin ein Intelliisense junkie)Wobei... Ich hab schon damals diese Notation für viel zu umständlich empfunden... Weil eine Änderung des Typs immer eine Umbenennen der Variablen nach sich gezogen hätte... Dummfug halt.
Was ich wohl bis heute benutze ist das (m) vor Membervariablen einer Klasse und (s) für statics... Überflüssig oder nicht, who cares. Macht es aber im Code leichter lokale Variablen von Members zu unterscheiden... Jedem das Seine...
-
thordk schrieb:
die ungarische notation wurde von einem microsoft mitarbeitet erfunden

Das stimmt, aber Charles Simonyi hat Jahre zuvor (beovr er zu Microsoft ging) die Ungarische Notation entwickelt.
Aber ich sag ja: Nieder mit diesem Müll, hat in C++ nichts zu suchen!
-
loks schrieb:
Hinzu kommt das im alten C alle Variablen immer am Anfang des Blocks definiert werden mußten.
und ich hatte es mittlerweile FAST vergessen... du böser mensch!
-
thordk schrieb:
loks schrieb:
Hinzu kommt das im alten C alle Variablen immer am Anfang des Blocks definiert werden mußten.
und ich hatte es mittlerweile FAST vergessen... du böser mensch!
Das empfand ich aber als schlimmer:
int test_funktion (parameter1, parameter2) int parameter1, int parameter2 { int result; result = parameter1 + parameter2; return (result); }
-
Das ist dann gar nicht mehr so weit von Assembler entfernt

-
Ungarische Notation kann man in C++ zu nichts gebrauchen, also finger weg. Ist wie sprintf in C++.
-
Artchi schrieb:
Soweit ich weiß, wurde die ungarische Notation von einem ungarischen MS-Mitarbeiter eingeführt, weil er damals kein englisch konnte und so die Kollegen ihn "verstehen" konnten.
Geiles Gerücht.

Mal ein bissl Klarheit. Die ungarische Notation wurde für das Microsoft-Office-Projekt eingeführt, zumindest ist das Joel Spolskys Theorie und er als Insider hat da sicher etwas Ahnung. Ich empfehle seinen Artikel. Gerade denen, die so vehement gegen UN wettern. Ich bin zwar nach wie vor ein Feind der UN in Sprachen, deren Semantik eine strikte Typentrennung zulassen. Trotzdem sind einige Notationen durchaus sinnvoll (man schaue sich z.B. mal den Gebrauch von '_t' in Bibliotheken wie Boost::Spirit an; ohne solch eine Notation wär's da echt chaotisch). Genrell ist mein Gedanke dazu: UN ist -- für Typenkennzeichnungen -- in einer streng typisierten Sprache absolut sinnlos. Sie *ist* aber sinnvoll, um andere semantische Kennzeichnungen vorzunehmen, die nicht durch den Compiler überprüft werden. Allerdings sind das fast immer temporäre Lösungen. Die Beispiele in Joels Artikel finde ich da nicht sehr gut. Hier gäbe es bessere Lösungen.
Na ja, hier der Artikel: http://www.joelonsoftware.com/articles/Wrong.html
-
Nachtrag:
Das Präfix 'm_' (oder eine andere beliebige Notation) ist wirklich ein sinnvoller Einsatz der Ungarischen Notation. Hier wird nämlich eine Semantik deutlich gemacht, die sonst verloren ginge. In VB könnte man hier zwar auch getrost 'Me.' nehmen aber 'this->' unter C++ finde ich vergleichsweise zu klobig (außerdem bedeutet 'Me.' bzw. 'this->' nicht immer dasselbe wie 'm_').
-
Mestro schrieb:
Ungarische Notation ... Ist wie sprintf in C++.
schreib' doch **std::**sprintf. vielleicht findest du das besser
