was genau bedeutet _ vor einer variable bzw wann benutzt man..



  • hallo,

    ich habe jetzt schon öfters gesehen das manche variablen mit einem "_" beginnen.
    Wann genau benutzt man das? Ist das nur damit man sie besser auseinander halten kann, oder hat das noch andere Hintergründe?

    Vielen Dank für eure Mühe, auch wenn es kein richtiges c++-code problem ist.

    Jonas



  • Diese Art von Namen sind für die Compiler-Hersteller reserviert. Sie dürften nur in Standardheadern bzw. als Präprozessor-Anweisungen zu finden sein. Selber welche zu erstellen ist nicht erlaubt.



  • oh okay, also ich kann nicht einfach z.b.

    int _a;
    

    benutzen?
    Weißt du zufällig wo ich sowas nachlesen kann?



  • Kleine Korrektur: Variablennamen mit führenden doppelten Unterstrich sind per Konvention dem Compilerhersteller vorenthalten. Ein einfacher Unterstrich ist einfach nur Geschmackssache.


  • Mod

    tntnet schrieb:

    Kleine Korrektur: Variablennamen mit führenden doppelten Unterstrich sind per Konvention dem Compilerhersteller vorenthalten. Ein einfacher Unterstrich ist einfach nur Geschmackssache.

    Da muss ich dich korrigieren: Einfacher Unterstrich am Anfang und doppelter Unterstrich an irgendeiner Stelle sind der Implementierung vorbehalten.

    _jonas schrieb:

    oh okay, also ich kann nicht einfach z.b.

    int _a;
    

    benutzen?

    Du kannst. Und es wird auch oft funktionieren. Aber muss es nicht unbedingt. Also tu es lieber nicht.

    _jonas schrieb:

    Weißt du zufällig wo ich sowas nachlesen kann?

    Im C++ Standard:
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf
    Das Thema dieses Threads wird in Kapitel 17.4.3.1.2 behandelt.



  • Einfacher Unterstrich am Anfang is AFAIK nur im globalen Namespace ohne weitere Ausnahmen reserviert. In Klassen soweit ich weiss nur wenn darauf ein Grossbuchstabe folgt. So inetwa zumindest. Und einige Bezeichner die mit nem grossen E anfangen sind auch reserviert.

    C++ is echt kompliziert 🙂

    Wenn man in Walldorf wohnt oder arbeitet, weiss man aber natürlich, dass man dieses "Problem" ganz einfach lösen kann: man merkt sich die einfache wie geniale Regel "Alle selbst definierten Bezeichner müssen mit Z anfangen", und schon kann man nie mehr aus Versehen einen reservierten Bezeichner verwenden.



  • ISO/IEC 14882:2003 17.4.3.1.2:

    Certain sets of names and function signatures are always reserved to the implementation:

    — Each name that contains a double underscore (_ _) or begins with an underscore followed by an upper-case letter (2.11) is reserved to the implementation for any use.
    — Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.

    Das heißt:

    int _A;   // böse
    int __a;  // böse
    int a__b; // böse
    int _a;   // böse, wenn im globalen Namensraum, sonst in Ordnung.
    

    Ich habe _a gelegentlich als Kennzeichnung für Member-Variablen gesehen. Wie verbreitet das ist, kann ich allerdings nicht beurteilen.



  • _jonas schrieb:

    was genau bedeutet _ vor einer variable bzw wann benutzt man.

    Das der Programmierer nicht programmieren kann.


Anmelden zum Antworten