Namensräume
Varianten
Aktionen

Alternative Operatoren und Token

Von cppreference.com
< c‎ | Sprache

C-Quellcode kann in jedem 8-Bit-Zeichensatz geschrieben werden, der die ISO 646:1983-Invariante Zeichenmenge enthält, auch nicht-ASCII-Zeichensätze. Jedoch erfordern mehrere C-Operatoren und Satzzeichen Zeichen, die außerhalb der ISO 646 Codeset liegen: {, }, [, ], #, \, ^, |, ~. Um Zeichenkodierungen verwenden zu können, bei denen einige oder alle dieser Symbole nicht existieren (wie z. B. das deutsche DIN 66003), gibt es zwei Möglichkeiten: alternative Schreibweisen von Operatoren, die diese Zeichen verwenden, oder spezielle Kombinationen von zwei oder drei ISO 646-kompatiblen Zeichen, die als einzelnes Nicht-ISO 646-Zeichen interpretiert werden.

Inhalt

[bearbeiten] Operator-Makros (C95)

Es gibt alternative Schreibweisen für Operatoren, die Nicht-ISO646-Zeichen verwenden, definiert in <iso646.h> als Makros

Definiert im Header <iso646.h>
Primär Alternative
&&
und
(Operator-Makro)
&=
and_eq
(Operator-Makro)
&
bitand
(Operator-Makro)
|
bitor
(Operator-Makro)
~
compl
(Operator-Makro)
!
not
(Operator-Makro)
!=
not_eq
(Operator-Makro)
||
or
(Operator-Makro)
|=
or_eq
(Operator-Makro)
^
xor
(Operator-Makro)
^=
xor_eq
(Operator-Makro)

Die Zeichen & und ! sind unter ISO-646 invariant, aber Alternativen werden für die Operatoren bereitgestellt, die diese Zeichen dennoch verwenden, um noch restriktivere historische Zeichensätze zu ermöglichen.

Es gibt keine alternative Schreibweise (wie z. B. eq) für den Gleichheitsoperator ==, da das Zeichen = in allen unterstützten Zeichensätzen vorhanden war.

[bearbeiten] Alternative Token (C95)

Die folgenden alternativen Token sind Teil der Kernsprache und verhalten sich in jeder Hinsicht der Sprache genauso wie ihre primären Token, außer ihrer Schreibweise (der Stringifizierungsoperator kann die Schreibweise sichtbar machen). Die zweibuchstabigen alternativen Token werden manchmal als "Digraphen" bezeichnet (obwohl %:%:, das vier Buchstaben lang ist, ebenfalls als Digraph gilt).


Primär Alternative
{ <%
} %>
[ <:
] :>
# %:
## %:%:

[bearbeiten] Trigraphen (in C23 entfernt)

Die folgenden Drei-Zeichen-Gruppen (Trigraphen) werden vor der Erkennung von Kommentaren und String-Literalen analysiert, und jedes Vorkommen eines Trigraphen wird durch das entsprechende Primärzeichen ersetzt

Primär Trigraph
{ ??<
} ??>
[ ??(
] ??)
# ??=
\ ??/
^ ??'
| ??!
~ ??-

Da Trigraphen früh verarbeitet werden, wird ein Kommentar wie // Wird die nächste Zeile ausgeführt?????/ die folgende Zeile effektiv auskommentieren, und der String-Literal wie "Was gibt es denn??!" wird als "Was gibt es denn|" analysiert.

[bearbeiten] Beispiel

Demonstriert alternative Operator-Schreibweisen aus <iso646.h> sowie die Verwendung von Digraphen und Trigraphen. Wenn Kommandozeilenargumente Leerzeichen enthalten, sollten sie in Anführungszeichen gesetzt werden, z. B. "Third World!".

%:include <stdio.h>
%:include <stdlib.h>
??=include <iso646.h>
 
int main(int argc, char** argv)
??<
    if (argc > 1 and argv<:1:> not_eq NULL)
    <%
       printf("Hello %s??/n", argv<:1:>);
    %>
    else
    <%
       printf("Hello %s??/n", argc? argv??(42??'42??) : __FILE__);
    %>
 
    return EXIT_SUCCESS;
??>

Mögliche Ausgabe

Hello ./a.out

[bearbeiten] Siehe auch

C++ Dokumentation für Alternative Operator-Darstellungen