Alternative operators and tokens
C source code may be written in any 8-bit character set that includes the ISO 646:1983
{, }, [, ], #, \, ^, |, ~
. To be able to use character encodings where some or all of these symbols do not exist (such as the German DIN 66003
Operator macros (C95)
There are alternative spellings for the operators that use non-ISO646 characters, defined in <iso646.h> as macros:
Defined in header
<iso646.h> | |
Primary | Alternative |
&& |
and (operator macro) |
&= |
and_eq (operator macro) |
& |
bitand (operator macro) |
| |
bitor (operator macro) |
~ |
compl (operator macro) |
! |
not (operator macro) |
!= |
not_eq (operator macro) |
|| |
or (operator macro) |
|= |
or_eq (operator macro) |
^ |
xor (operator macro) |
^= |
xor_eq (operator macro) |
The characters & and !
There is no alternative spelling (such as eq) for the equality operator == because the character =
Alternative tokens (C95)
The following alternative tokens are part of the core language, and, in all respects of the language, each alternative token behaves exactly the same as its primary token, except for its spelling (the stringification operator can make the spelling visible). The two-letter alternative tokens are sometimes called "digraphs" (even though it is four letters long %:%:
Primary | Alternative |
---|---|
{ |
<%
|
} |
%>
|
[ |
<:
|
] |
:>
|
# |
%:
|
## |
%:%:
|
Trigraphs (removed in C23)
The following three-character groups (trigraphs) are parsed before comments and string literals are recognized
Primary | Trigraph |
---|---|
{ |
??<
|
} |
??>
|
[ |
??(
|
] |
??)
|
# |
??=
|
\ |
??/
|
^ |
??'
|
| |
??!
|
~ |
??-
|
Because trigraphs are processed early, a comment such as // Will the next line be executed?????/ will effectively comment out the following line, and the string literal such as "What's going on??!" is parsed as "What's going on|"
Example
Demonstrates alternative operator spellings from the <iso646.h> as well as use of digraphs and trigraphs. If command line arguments contain spaces they should be wrapped in the quotation marks, e.g., "Third World!"
Possible output:
Hello ./a.out
See also
C++ documentation for Alternative operator representations
|