Wann wurden die alternativen Token „und“ und „oder“ in C++ eingeführt?

Lesezeit: 4 Minuten

Wann wurden die alternativen Token „und und „oder in C
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

1646642414 60 Wann wurden die alternativen Token „und und „oder in C
paxdiablo

Von dem Erste ISO-C++-Standard C++98das ist beschrieben in 2.5/ Alternative tokens [lex.digraph]:


  1. Für einige Operatoren und Interpunktionszeichen werden alternative Tokendarstellungen bereitgestellt.
  2. 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 ].

1646642415 574 Wann wurden die alternativen Token „und und „oder in C
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.

1646642415 949 Wann wurden die alternativen Token „und und „oder in C
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

Liste von C++-Schlüsselwörter.

Ich glaube, dass neuere Versionen von GCC diese Schlüsselwörter unterstützen.

1646642415 91 Wann wurden die alternativen Token „und und „oder in C
Josua

Der GNU-Compiler g++ hat sie, aber ich weiß nichts über MS VC++.

Sie können die gleiche Funktionalität erhalten, indem Sie dies an den Anfang Ihrer Codedatei setzen.

#define and &&
#define bitor |
#define or ||
#define xor ^
#define compl ~
#define bitand &
#define and_eq &=
#define or_eq ^=
#define xor_eq ^=
#define not !
#define not_eq !=

Obwohl das ein bisschen hackish ist, sollte es funktionieren.

  • Oder fügen Sie hinzu, wenn Ihre Implementierung es hat (ich denke, die meisten tun es).

    – Michael Burr

    17. Februar 2009 um 4:33 Uhr

  • Oder , wenn Sie C++ verwenden.

    – Zack der Mensch

    17. Februar 2009 um 4:52 Uhr

964470cookie-checkWann wurden die alternativen Token „und“ und „oder“ in C++ eingeführt?

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

Privacy policy