Haben das „at“-Symbol (@) und das Dollarzeichen ($) in C oder C++ eine besondere Bedeutung?

Lesezeit: 3 Minuten

Benutzeravatar von Forever Learner
Für immer Lernender

Kürzlich stieß einer meiner Freunde in einem Interview auf diese Frage. Der Interviewer fragte ihn, ob ihm die Sonderzeichen gefallen $, @, |, ^, ~ irgendeine Verwendung in C oder C++ haben und wo.

ich weiß, dass |, ^ and ~ werden verwendet als bitweise ODER, XOR und ergänzen bzw.

Tun @ Und $ eine besondere Bedeutung haben? Wenn ja, welches wäre ein Beispiel, wo es angewendet werden könnte?

  • Wenn Sie Ihre E-Mail-Adresse angeben und wie viel Gehalt Sie benötigen?

    – Das

    9. Juni 2014 um 5:52

  • Ich bin mir ziemlich sicher, dass die Antwort darin besteht, dass sie keine besondere Bedeutung haben.

    – quant

    9. Juni 2014 um 5:55

  • Nein, weder Teil des grundlegenden Quellzeichensatzes noch des grundlegenden Ausführungszeichensatzes.

    – Chris

    9. Juni 2014 um 5:55


  • @Arman Für eine Definition von „besonderer Bedeutung“. Sie sind außerhalb von Kommentaren, Zeichenfolgenliteralen und Zeichenliteralen illegal.

    – James Kanze

    9. Juni 2014 um 8:56

  • Beachten Sie, dass Microsoft @ in Bibliotheksfunktionsnamen verwendet, gefolgt von einer Zahl, die die Anzahl der Bytes angibt, die für Eingabeparameter für bestimmte 32-Bit-Aufrufkonventionen verwendet werden. Diese „verstümmelten“ Namen sind jedoch nur im Assemblercode sichtbar, nicht im C- oder C++-Code.

    – rcgldr

    7. Februar 2017 um 15:16

@ ist in C generell ungültig; es wird für nichts verwendet. Es wird von Objective-C für verschiedene Zwecke verwendet, aber das ist eine ganz andere Sache.

$ ist ebenfalls ungültig, aber viele Implementierungen erlauben das Erscheinen in Bezeichnern, genau wie ein Buchstabe. (In diesen Implementierungen könnten Sie beispielsweise eine Variable oder Funktion benennen $$$ wenn es Ihnen gefallen hat.) Auch dort hat es jedoch keine besondere Bedeutung.

  • Wenn eine Implementierung beschließt, dies nicht zu unterstützen, funktioniert Ihr Code natürlich plötzlich nicht mehr.

    – Chris

    9. Juni 2014 um 5:56

  • Sind die einzigen gültigen Zeichen für Namen nicht a-zA-z_0-9?

    – Das

    9. Juni 2014 um 5:57


  • Korrigiert am $; Ich habe vergessen, dass es sich um eine Erweiterung handelt.

    Benutzer149341

    9. Juni 2014 um 5:58

  • Beachten Sie, dass weder @ noch $ für die Operatorüberladung gültig sind, obwohl Sie mit Präprozessormakros möglicherweise irgendwie böse Dinge tun können

    – Matt Coubrough

    9. Juni 2014 um 6:03

  • void $$$$ (void) { printf (“Hai”); } main() { $$$$(); } Fehler: Suffix oder Operanden für „Aufruf“ ungültig. Wie ?

    – mahendiran.b

    9. Juni 2014 um 6:05

Bilows Benutzeravatar
Bilow

Um die akzeptierte Antwort zu vervollständigen, muss die @ kann verwendet werden, um die absolute Adresse einer Variablen auf eingebetteten Systemen anzugeben.

unsigned char buf[128]@0x2000;

Beachten Sie, dass es sich hierbei um eine nicht standardmäßige Compiler-Erweiterung handelt.

Eine gute Erklärung finden Sie hier

  • Warum? Was ist der Vorteil gegenüber unsigned char *buf = 0x2000;, da C ohnehin keine Grenzenprüfung zur Kompilierungszeit durchführt (auch wenn dies möglich ist)?

    – Muzer

    23. März 2017 um 17:19 Uhr

  • @Muzer, es macht zumindest einen Unterschied sizeof. Abhängig von Ihrem Compiler und den verwendeten Flags können Sie dann eine Überprüfung der Kompilierzeit- oder Laufzeitgrenzen durchführen.

    – To마SE

    15. Juni 2017 um 3:43

Um die anderen Antworten zu vervollständigen. Der C99-Standard in 5.2.1.3:

Sowohl der grundlegende Quell- als auch der grundlegende Ausführungszeichensatz müssen die folgenden Mitglieder haben:

die 26 Großbuchstaben des lateinischen Alphabets

A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z

die 26 Kleinbuchstaben des lateinischen Alphabets

a b c d e f g h i j k l m
n o p q r s t u v w x y z

die 10 Dezimalstellen

0 1 2 3 4 5 6 7 8 9

die folgenden 29 grafischen Zeichen

! " # % & ' ( ) * + , - . / :
; < = > ? [ \ ] ^ _ { | } ~

Alle anderen Charaktere existieren vielleicht gar nicht. (Und sollte nicht verwendet werden)

Es gibt aber auch diesen Punkt in den Common extensions: Annex J, J.5.2:

Andere Zeichen als der Unterstrich _, Buchstaben und Ziffern, die nicht Teil des grundlegenden Quellzeichensatzes sind (z. B. das Dollarzeichen $ oder Zeichen in nationalen Zeichensätzen), können in einem Bezeichner erscheinen (6.4.2).

Das ist im Grunde das, was duskwuff bereits geschrieben hat.

1454320cookie-checkHaben das „at“-Symbol (@) und das Dollarzeichen ($) in C oder C++ eine besondere Bedeutung?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy