Wann wurden die alternativen Token „und“ und „oder“ in C++ eingeführt?
Lesezeit: 4 Minuten
tschüss
Ich habe das gerade gelesen schönes Stück von reddit.
Sie erwähnen and und or als “Alternative Tokens” zu sein && und ||
Diese waren mir bisher wirklich nicht bekannt. Das weiß natürlich jeder Di-Graphen und Tri-Graphenaber and und or? Seit wann? Ist dies eine neue Ergänzung zum Standard?
Ich habe es gerade mit Visual C++ 2008 überprüft und es scheint diese nicht als etwas anderes als einen Syntaxfehler zu erkennen. Was ist los?
Mir gefällt, dass sieben Jahre später immer noch keine der gegebenen Antworten diese Frage tatsächlich beantwortet. lol
– Leichtigkeitsrennen im Orbit
9. Mai 2016 um 16:58 Uhr
@LightnessRacesinOrbit manchmal denke ich, dass es nicht viel ausmacht, solange es die Google-Suche beantwortet 😉
– Ciro Santilli 新疆再教育营六四事件法轮功郝海东
10. Mai 2016 um 5:54 Uhr
Ich habe jetzt eine Antwort hinzugefügt, die die Frage beantwortet!
– Martin Bonner unterstützt Monika
15. Juli 2016 um 20:34 Uhr
Eigentlich beantwortet @MartinBonner Ihre Frage genauer als die gewählte Antwort.
– Sergey.quixoticaxis.Iwanow
30. November 2017 um 17:02 Uhr
Mir ist gerade aufgefallen, dass diese in VS2017 enthalten sind … Ich weiß nicht, ob sie in früheren Versionen enthalten waren.
– Jonathan Mei
2. Mai 2018 um 15:03 Uhr
paxdiablo
Von dem Erste ISO-C++-Standard C++98das ist beschrieben in 2.5/ Alternative tokens [lex.digraph]:
Für einige Operatoren und Interpunktionszeichen werden alternative Tokendarstellungen bereitgestellt.
In allen Belangen der Sprache verhält sich jedes alternative Token bis auf die Schreibweise genauso wie sein primäres Token. Der Satz alternativer Token ist in Tabelle 2 definiert.
Table 2 - Alternative tokens
alternative primary | alternative primary | alternative primary
--------------------+---------------------+--------------------
<% { | and && | and_eq &=
%> } | bitor | | or_eq |=
<: [ | or || | xor_eq ^=
:> ] | xor ^ | not !
%: # | compl ~ | not_eq !=
%:%: ## | bitand & |
Es gibt es also schon seit den frühesten Tagen des C++-Standardisierungsprozesses. Der Grund, warum sich so wenige Leute dessen bewusst sind, liegt wahrscheinlich darin, dass der Hauptanwendungsfall für Menschen war, die in Umgebungen arbeiteten, in denen nicht unbedingt der vollständige Zeichensatz verfügbar war. Zum Beispiel (und das sprengt mein Gedächtnis) enthielt der grundlegende EBCDIC-Zeichensatz auf den IBM-Mainframes keine eckigen Klammerzeichen [ and ].
Michael Burr
MSVC unterstützt sie nur dann als Schlüsselwörter, wenn Sie die verwenden /Za Option zum Deaktivieren von Erweiterungen; dies gilt mindestens ab VC7.1 (VS2003).
Sie können sie als Makros unterstützen lassen, indem Sie sie einschließen iso646.h.
Meine Vermutung ist, dass sie glauben, dass die Verwendung von standardmäßigen Schlüsselwörtern zu viel vorhandenen Code beschädigen würde (und ich wäre nicht überrascht, wenn sie Recht hätten).
Python ist also 50x cool, weil man schreiben kann andwährend C dies die ganze Zeit über als Feature hatte.
– bobobobo
20. April 2013 um 13:44 Uhr
@bobobobo Es scheint ein bisschen frustrierend, dass wir müssen #include <ciso646> Überall dort, wo wir diese Schlüsselwörter in Visual Studio verwenden möchten. Es ist wahrscheinlich keine Überraschung, dass g++ sie standardmäßig unterstützt, da sie im Standard enthalten sind.
– Jonathan Mei
5. Januar 2015 um 17:07 Uhr
Um die Frage eigentlich zu beantworten:
Sie wurden im ersten C++-Standard definiert.
Adam Rosenfield
Siehe C++-Standard. Der Entwurf Nr. 2 des Komitees ist unter ftp://ftp.research.att.com/dist/c++std/WP/CD2/body.pdf frei verfügbar, obwohl er nicht maßgeblich, veraltet und teilweise ist an einigen Stellen falsch. Insbesondere in Abschnitt 2.5, Alternative Tokensind folgende definiert:
Alternative Primary
<% {
%> }
<: [
:> ]
%: #
%:%: ##
and &&
bitor |
or ||
xor ^
compl ~
bitand &
and_eq &=
or_eq |=
xor_eq ^=
not !
not_eq !=
Obwohl ich ehrlich gesagt noch nie einen von ihnen gesehen habe, außer für and, orund not, und selbst dann sind die selten. Beachten Sie, dass diese standardmäßig NICHT im reinen C-Code zulässig sind, sondern nur in C++. Wenn Sie sie in C verwenden möchten, müssen Sie beides tun #define sie selbst als Makros, oder #include die Überschrift <iso646.h>die alle oben genannten Ausnahmen definiert <%>%<::>%:%:%: als Makros (siehe Abschnitt 7.9 des C99-Standards).
Obwohl die Frage alt ist, möchte ich sie mehr oder weniger vollständig beantworten: Alternative Tokens waren bereits ein Teil des derzeit zurückgezogenen C++98 (ISO/IEC 14882:1998, der meiner Meinung nach der erste ISO-Standard für C++ war). Obwohl es kein Beweis an sich ist (und ich besitze keine Kopie von ISO für c++98), Hier ist ein Link – siehe Abschnitt C++.
Wie in den anderen Antworten erwähnt, verletzt der MSVC-Compiler [lex.digraph] Abschnitt des Standards, wenn /Za Flag ist nicht angegeben.
Sie werden überrascht sein, etwas über den Rest zu erfahren:
and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq
Mir gefällt, dass sieben Jahre später immer noch keine der gegebenen Antworten diese Frage tatsächlich beantwortet. lol
– Leichtigkeitsrennen im Orbit
9. Mai 2016 um 16:58 Uhr
@LightnessRacesinOrbit manchmal denke ich, dass es nicht viel ausmacht, solange es die Google-Suche beantwortet 😉
– Ciro Santilli 新疆再教育营六四事件法轮功郝海东
10. Mai 2016 um 5:54 Uhr
Ich habe jetzt eine Antwort hinzugefügt, die die Frage beantwortet!
– Martin Bonner unterstützt Monika
15. Juli 2016 um 20:34 Uhr
Eigentlich beantwortet @MartinBonner Ihre Frage genauer als die gewählte Antwort.
– Sergey.quixoticaxis.Iwanow
30. November 2017 um 17:02 Uhr
Mir ist gerade aufgefallen, dass diese in VS2017 enthalten sind … Ich weiß nicht, ob sie in früheren Versionen enthalten waren.
– Jonathan Mei
2. Mai 2018 um 15:03 Uhr