Saltar a contenido

Última actualización:2026-10-12

C++ Trígrafos

C++那些事: eliminación de los trígrafos

Antes de C++17, los trígrafos eran una funcionalidad para escribir programas con códigos de caracteres pequeños como ISO/IEC 646, introducida en C89. A ISO/IEC 646 le faltan los siguientes caracteres usados en C, por lo que hay que escaparlos con ??:

Contenido del trígrafo Carácter sustituido
??= #
??( [
??) ]
??< {
??> }
??/ \
??! |
??- ~
??' ^

\? se escapa para evitar que lo sustituya la tabla de trígrafos.

En C++17 los trígrafos se eliminaron, y ??= y similares ya no se sustituyen.

Ejemplos

Antes de C++17:

std::cout << "??=" << std::endl;
std::cout << "??(" << std::endl;
std::cout << "?\?(" << std::endl;

Salida:

#
[
??(

En C++17 y posteriores:

??=
??(
??(

Hoy en día, probablemente porque codificaciones de caracteres como Unicode ya están generalizadas, los trígrafos ya no son necesarios, y compiladores como gcc los desactivan por defecto.

Temas relacionados

Comentarios