Was bedeutet “???-” im C++-Code? [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
taocp

Ich habe den folgenden Code aus einigen Legacy-Codes gesehen:

 size_t a = 1 ???- 2 :0;

Was bedeutet das Symbol ???- meinst du in C++? Wie soll ich es verstehen?

  • ??? darf nur in Kommentaren verwendet werden. 🙂

    – Markus García

    21. Mai 2013 um 4:48 Uhr

  • Es wäre lustig, sich eine falsche Bedeutung für diesen Operator auszudenken. ???- könnte das ‘Wirklich??? Ich bin schockiert!’ Betreiber, a ? das weist den Compiler beispielsweise darauf hin, dass der erste Zweig selten genommen wird.

    – Patashu

    21. Mai 2013 um 4:48 Uhr


  • Obligatorische Erwähnung des WTF-Operators: ??!??!

    – Chris

    21. Mai 2013 um 4:48 Uhr

  • Trigraphen existieren, um zwei Probleme zu lösen. Erstens unterstützen einige eingebettete Systeme nur einen sehr begrenzten Zeichensatz und können Zeichen wie „^“ und „~“ möglicherweise nicht anzeigen oder eingeben. Zweitens unterstützen einige Betriebssysteme mehrere Codepages mit unterschiedlichen Codierungen für „~“, „^“, „|“ usw. Die einzige Möglichkeit, um sicherzustellen, dass Ihr Code alle Codepage-Variationen unterstützt, ist die Verwendung von Trigraphen (Hier sehen Sie sich IBM EBCDIC an!).

    – James Anderson

    21. Mai 2013 um 4:53 Uhr

  • @JamesAnderson Eingebettete Systeme? Was rauchst du? Trigraphen haben keinen Einfluss auf die Programmfunktionalität oder das Zielsystem. Sie sind effektiv eine Zeichencodierung für Quelldateien und eine Annehmlichkeit für Benutzer, denen bestimmte Tasten auf ihrer Tastatur fehlen. IBM setzt sich gegen ihre Abwertung ein, weil es ihnen angeblich ermöglicht, ihre Mainframe-Benutzer nicht dazu zu zwingen, eine EBCDIC-Textcodierung zu standardisieren. Aber ein Mainframe ist das genaue Gegenteil eines eingebetteten Systems.

    – Kartoffelklatsche

    21. Mai 2013 um 5:24 Uhr

Benutzer-Avatar
Mystisch

Es ist eigentlich:

size_t a = 1 ? ~2 :0;

??- ist ein Trigraph zum ~


Trigraphen stammen aus einer alten Ära … bevor einige von uns überhaupt geboren wurden.

Früher gab es einige Zeichen, die nicht immer unterstützt wurden. Ein unwissender Programmierer würde versuchen, ein solches Zeichen einzugeben, nur um festzustellen, dass es auf der Tastatur nicht existiert!

Geben Sie hier die Bildbeschreibung ein
Bildquelle: http://www.myoldmac.net/cgi-data/forum/phpBB2/viewtopic.php?t=305

Daher wurden Trigraphen hinzugefügt, um dem Programmierer den Zugriff auf die Funktionalität dieser Zeichen zu ermöglichen, wenn sie nicht existierten (entweder in der Codierung oder über die Tastatur).

Heutzutage sind sie veraltet und verwirren den Leser effektiver, als alte Standards zu umgehen.

Entweder ist dieser Code wirklich alt, oder der Autor war ein Idiot.

  • Ich habe gesehen, wie die Benachrichtigung etwa 10 Millisekunden vor dem Klicken kam, und ich konnte nichts dagegen tun: p

    – Chris

    21. Mai 2013 um 4:45 Uhr

  • Ich stimme für (b), der Autor war ein Idiot. a = 1 ? ~2 : 0 ist verschleiert lange Hand für a = ~2. Der trinäre Operator ist nur aus einem Grund da: Um den Code zu verschleiern. Das Hinzufügen des Trigraphen, um die Tilde zu verschleiern, macht den Kuchen einfach eisig.

    – David Hamm

    21. Mai 2013 um 5:50 Uhr

  • “Trigraphen stammen aus einer alten Zeit.” — Trigraphen wurden der Sprache durch den ANSI-C-Standard von 1989 hinzugefügt. Sie wurden nie entfernt; der 2011er ISO C-Standard hat sie immer noch.

    – Keith Thompson

    21. Mai 2013 um 6:00 Uhr

  • Wenn der Autor kein Idiot gewesen wäre und der Trigraph in dieser Situation wirklich gebraucht worden wäre, dann wäre er so geschrieben worden ? ??- anstatt ???- zum leichteren Verständnis.

    – vsz

    21. Mai 2013 um 6:13 Uhr


  • @vsz Eigentlich denke ich, wenn der Autor sich um Lesbarkeit gekümmert hätte, wäre es das gewesen ? compl 2 anstatt ? ??- 2.

    – Ruslan

    12. September 2017 um 16:42 Uhr

??- ist ein Trigraph für die Tilde ~ Charakter; Die Zeile ist äquivalent zu:

size_t a = 1 ? ~2 :0;

Benutzer-Avatar
CodeRider

??- ist ein Trigraph für ~ Charakter. Einige andere Trigraphen sind:

 ??= for #

??/ for \

??' for ^

??! for |

Die Verwendung von Trigraphen ist heute sehr selten.

  • “Die Verwendung von Trigraphen ist jetzt sehr selten.” – nicht in SO.

    – Markus García

    21. Mai 2013 um 10:31 Uhr

  • @Yawz Ich würde denken, dass sie mitgehen würden ~ zu Ende ??- wenn auch nur für die Zeichenzählung.

    – TankorSmash

    24. April 2014 um 15:41 Uhr

1012130cookie-checkWas bedeutet “???-” im C++-Code? [duplicate]

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

Privacy policy