Espacios de nombres
Variantes

Secuencias de escape

De cppreference.com
 
 
 
 

Las secuencias de escape se utilizan para representar ciertos caracteres especiales dentro de literales de cadena y literales de carácter.

Las siguientes secuencias de escape están disponibles:

Secuencia
de escape
Descripción Representación
Secuencias de escape simples
\' Comilla simple Byte 0x27 en codificación ASCII
\" Comilla doble o inglesa Byte 0x22 en codificación ASCII
\? Cierra signo de interrogación Byte 0x3f en codificación ASCII
\\ Barra inversa o invertida Byte 0x5c en codificación ASCII
\a Pitido Byte 0x07 en codificación ASCII
\b Retroceso Byte 0x08 en codificación ASCII
\f Nueva página, salto de página Byte 0x0c en codificación ASCII
\n Nueva línea, salto de línea Byte 0x0a en codificación ASCII
\r Retorno de carro Byte 0x0d en codificación ASCII
\t Tabulador horizontal Byte 0x09 en codificación ASCII
\v Tabulador vertical Byte 0x0b en codificación ASCII
Secuencias de escape numéricas
\nnn Valor octal arbitrario Byte nnn
\xnn Valor hexadecimal arbitrario Byte nn
Secuencias de escape condicionales[1]
\c Definido por la implementación Definido por la implementación
Nombres de carácter universales
\unnnn Valor Unicode arbitrario;
puede resultar en varias unidades de código
Punto de código U+nnnn
\Unnnnnnnn Valor Unicode arbitrario;
puede resultar en varias unidades de código
Punto de código U+nnnnnnnn
  1. Se admiten condicionalmente las secuencias de escape condicionales. El carácter c en cada secuencia de escape condicional es un miembro del juego de caracteres fuente básico (hasta C++23)juego de caracteres básico (desde C++23) que no es el carácter que sigue a \ en ninguna otra secuencia de escape.

Rango de nombres de carácter universales

Si un nombre de carácter universal corresponde a un punto de código que no es ni 0x24 ($), 0x40 (@), ni 0x60 (`) y menor que 0xA0, el programa está mal formado. En otras palabras, miembros del juego de caracteres fuente básico y caracteres de control (en los rangos 0x0-0x1F y 0x7F-0x9F) no se pueden expresar en nombres de carácter universales.

(hasta C++11)

Si un nombre de carácter universal que corresponde a un punto de código de un miembro del juego de caracteres fuente básico o caracteres de control aparecen fuera de un literal de carácter o literal de cadena, el programa está mal formado.

Si un nombre de carácter universal corresponde a un punto de código sustituto (el rango 0xD800-0xDFFF, inclusive), el programa está mal formado.

Si un nombre de carácter universal utilizado en un literal de cadena UTF-16/32 no corresponde a un punto de código en ISO/IEC 10646 (el rango 0x0-0x10FFFF, inclusive), el programa está mal formado.

(desde C++11)
(hasta C++20)

Si un nombre de carácter universal que corresponde a un punto de código de un miembro del juego de caracteres fuente básico o caracteres de control aparecen fuera de un literal de carácter o literal de cadena, el programa está mal formado.

Si un nombre de carácter universal no corresponde a un punto de código en ISO/IEC 10646 (el rango 0x0-0x10FFFF, inclusive) o corresponde a un punto de código sustituto (el rango 0xD800-0xDFFF, inclusive), el programa está mal formado.

(desde C++20)
(hasta C++23)

Si un nombre de carácter universal que corresponde a un valor escalar de un carácter en el juego de caracteres básico o un carácter de control aparece fuera de un literal de carácter o literal de cadena, el programa está mal formado.

Si un nombre de carácter universal no corresponde a un valor escalar de un carácter en el juego de caracteres de traducción, el programa está mal formado.

(desde C++23)

Notas

\0 es la secuencia de escape octal más comúnmente usada, ya que representa el carácter de terminación nulo en las cadenas terminadas en nulo.

El carácter de nueva línea \n tiene un significado especial cuando se usa en la E/S en modalidad de texto: se convierte a la representación de nueva línea específica del sistema operativo, generalmente un byte o secuencia de bytes. Algunos sistemas marcan sus líneas con campos de longitud en su lugar.

Las secuencias de escape octales tienen un límite de tres dígitos octales, pero terminan en el primer carácter que no es un dígito octal válido si se encuentra antes.

Las secuencias de escape hexadecimales no tienen límite de longitud y terminan en el primer carácter que no sea un dígito hexadecimal válido. Si el valor representado por una única secuencia de escape hexadecimal no se ajusta al rango de valores representado por el tipo de carácter utilizado en este literal de cadena (char, char8_t (desde C++20), char16_t, char32_t (desde C++11) o wchar_t), el resultado no está especificado.

Un nombre de carácter universal en un literal de cadena estrecho o un literal de cadena de 16 bits puede asignarse a más de una unidad de código, p. ej., \U0001f34c es 4 char unidades de código en UTF-8 (\xF0\x9F\x8D\x8C) y 2 char16_t unidades de código en UTF-16 (\xD83C\xDF4C).

(desde C++11)

La secuencia de escape cierre de signo de interrogación \? se usa para evitar que los trígrafos se interpreten dentro de cadenas literales: una cadena como "??/" se compila como "\", pero si se escapa el segundo signo de interrogación, como en "?\?/", se convierte en "??/". Como los trígrafos se han eliminado de C++, la secuencia de escape de cierre de signo de interrogación ya no es necesaria. Se conserva por compatibilidad con C++14 (y revisiones anteriores) y C. (desde C++17)

Ejemplo

#include <iostream>
 
int main()
{
    std::cout << "Esto\nes\nuna\nprueba\n\Ella dijo, \"Pablito clava un clavito?\"\n";
}

Salida:

Esto
es
una
prueba

Ella dijo, "Pablito clava un clavito?"

Véase también

Documentación de C para Secuencia de escape