Was bedeutet '__'-Zeichen vor einer Funktion?
-
Hallo.
Ich habe nur eine kurze Frage. Ich habe jetzt schon ganz oft in diversen Beispielprogrammen gesehen, dass Funktionen nicht mit einem Buchstaben beginnen, sondern immer ein '__' vorangestellt wurde. Was hat das zu bedeuten bzw. was bewirkt das?
Danke!
V.K.
-
bewriken tut es garnichts, Unterstriche sind genauso fuer Bezeichner erlaubt wie Buchstaben. Allerdings reservieren einige Compiler jegliche Bezeichner die mit ein oder zwei Unterstrichen beginnen fuer sich, bzw. verwenden sie intern irgendwo. Von daher sit bei der Verwendung solcher Bezeichner zumindest Vorsicht angeraten, am Besten verwendet man sie garnicht.
-
naja, sie am besten gar nicht zu benutzen, dürfte manchmal schwer sein. Denn z.B. für DLLs sind sind fast unumgänglich bzw. ohne sie, würde man Mehrarbeit haben.
Vorunterstriche sind Compiler-Herstellern vorbehalten. Bin ich kein Compiler-Hersteller, definiere ich solche Bezeichner auch nicht. Aber ich kann sie benutzen, wenn ich eine spezielle Compiler-Fähigkeit nutzen will oder muß. Da ist erstmal nichts schlimmes dran. Ich muß mir dann lediglich bewusst sein, das mein Sourcecode nicht mehr auf einem anderen Compiler laufen wird.
-
Allerdings reservieren einige Compiler jegliche Bezeichner die mit ein oder zwei Unterstrichen beginnen fuer sich
Nein, das schreibt der Standard so vor.
Alles was ein "__" enthält ist "für die Implementierung reserviert".
p.S.: Alles was mit einem "_" gefölgt von einem Grossbuchstaben beginnt übrigens auch.
Daher auch die vielen "_Ty" u.Ä. in diversen STL Implementierungen.
-
hustbaer schrieb:
p.S.: Alles was mit einem "_" gefölgt von einem Grossbuchstaben beginnt übrigens auch.
Plus alles was im globalen Namensraum mit "_" beginnt.
-
Denn z.B. für DLLs sind sind fast unumgänglich bzw. ohne sie, würde man Mehrarbeit haben.
Erklärung?
-
hustbaer schrieb:
Denn z.B. für DLLs sind sind fast unumgänglich bzw. ohne sie, würde man Mehrarbeit haben.
Erklärung?
Ohne mich jetzt wirklich mit den Details auszukennen: Wenn du DLLs wirklich dynamisch (LoadLibrary() und GetProcAdress()) verwenden willst, brauchst du idR den ergänzten Namen der Funktion - und den erzeugt der Compiler, indem er den eigentlichen Funktionsnamen noch mit Ergänzungen ausschmückt, die die Aufrufkonventionen und Parametertypen verschlüsseln.
-
hustbaer schrieb:
Denn z.B. für DLLs sind sind fast unumgänglich bzw. ohne sie, würde man Mehrarbeit haben.
Erklärung?
wenn man vergessen hat, die funktion in der DLL als '__stdcall' zu deklarieren, dann muss man bei 'GetProcAddress' einen underscore vor den namen setzen. das hat natürlich nichts mit underscores in echten funktionsnamen zu tun. mehrarbeit ist aber unsinn. man muss es nur gleich richtig machen.

-
Es geht bei den reservierten Bezeichnern um *Bezeichner*, in *C++*, nicht in Strings oder DLLs oder sonstwas.
Was hat das eine mit dem anderen zu tun?
Auch wenn der Name im export Table zu von "Blah" und "_Blah" wird, was juckt das irgendwen? Für'n Mr. Compiler ist es immernoch "Blah" und damit nicht reserviert.@CStoll: Sag "decorated" oder von miraus "dekoriert" - das hätte zumindest ich schneller verstanden als "ergänzt".