Haben das „at“-Symbol (@) und das Dollarzeichen ($) in C oder C++ eine besondere Bedeutung?
Lesezeit: 3 Minuten
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
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
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.
14543200cookie-checkHaben das „at“-Symbol (@) und das Dollarzeichen ($) in C oder C++ eine besondere Bedeutung?yes
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