Namespaces
Variants

Alternative operators and tokens

From cppreference.net

El código fuente en C puede escribirse en cualquier conjunto de caracteres de 8 bits que incluya el ISO 646:1983 conjunto de caracteres invariante, incluso aquellos no ASCII. Sin embargo, varios operadores y puntuadores de C requieren caracteres que están fuera del conjunto de códigos ISO 646: {, }, [, ], #, \, ^, |, ~ . Para poder utilizar codificaciones de caracteres donde algunos o todos estos símbolos no existen (como el DIN 66003 alemán), existen dos posibilidades: grafías alternativas de operadores que utilizan estos caracteres o combinaciones especiales de dos o tres caracteres compatibles con ISO 646 que se interpretan como si fueran un único carácter no ISO 646.

Contenidos

Macros de operador (C95)

Existen grafías alternativas para los operadores que utilizan caracteres no ISO646, definidas en <iso646.h> como macros:

Definido en el encabezado <iso646.h>
Primario Alternativo
&&
and
(macro de operador)
&=
and_eq
(macro de operador)
&
bitand
(macro de operador)
|
bitor
(macro de operador)
~
compl
(macro de operador)
!
not
(macro de operador)
!=
not_eq
(macro de operador)
||
or
(macro de operador)
|=
or_eq
(macro de operador)
^
xor
(macro de operador)
^=
xor_eq
(macro de operador)

Los caracteres & y ! son invariantes bajo ISO-646, pero se proporcionan alternativas para los operadores que utilizan estos caracteres de todos modos para adaptarse a conjuntos de caracteres históricos aún más restrictivos.

No existe una ortografía alternativa (como eq ) para el operador de igualdad == porque el carácter = estaba presente en todos los juegos de caracteres admitidos.

Tokens alternativos (C95)

Los siguientes tokens alternativos forman parte del lenguaje núcleo, y, en todos los aspectos del lenguaje, cada token alternativo se comporta exactamente igual que su token principal, excepto por su ortografía (el operador de stringificación puede hacer visible la ortografía). Los tokens alternativos de dos letras a veces se denominan "dígrafos" (aunque % : % : también se considera un dígrafo).


Principal Alternativo
{ <%
} %>
[ <:
] :>
# %:
## %:%:

Trígrafos (eliminados en C23)

Los siguientes grupos de tres caracteres (trigráficos) son analizados antes de que se reconozcan los comentarios y literales de cadena , y cada aparición de un trigráfico es reemplazada por el carácter primario correspondiente:

Primario Trígrafo
{ ??<
} ??>
[ ??(
] ??)
# ??=
\ ??/
^ ??'
| ??!
~ ??-

Debido a que los trigráficos se procesan tempranamente, un comentario como // Will the next line be executed?????/ efectivamente comentará la siguiente línea, y el literal de cadena como "What's going on??!" se analiza como "What's going on|" .

Ejemplo

Demuestra las grafías alternativas de operadores de la <iso646.h> así como el uso de dígrafos y trígrafos. Si los argumentos de la línea de comandos contienen espacios, deben envolverse entre comillas, por ejemplo, "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;
??>

Salida posible:

Hello ./a.out

Véase también

Documentación de C++ para Representaciones alternativas de operadores