Namespaces
Variants

Escape sequences

From cppreference.net

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

Las siguientes secuencias de escape están disponibles. ISO C requiere un diagnóstico si la barra invertida va seguida de cualquier carácter no listado aquí:

Secuencia de
escape
Descripción Representación
Secuencias de escape simples
\' comilla simple byte 0x27 en codificación ASCII
\" comilla doble byte 0x22 en codificación ASCII
\? signo de interrogación byte 0x3f en codificación ASCII
\\ barra invertida byte 0x5c en codificación ASCII
\a campana audible byte 0x07 en codificación ASCII
\b retroceso byte 0x08 en codificación ASCII
\f alimentación de formulario - nueva página byte 0x0c en codificación ASCII
\n alimentación de línea - nueva línea byte 0x0a en codificación ASCII
\r retorno de carro byte 0x0d en codificación ASCII
\t tabulación horizontal byte 0x09 en codificación ASCII
\v tabulación vertical byte 0x0b en codificación ASCII
Secuencias de escape numéricas
\ nnn valor octal arbitrario unidad de código nnn
\x n... valor hexadecimal arbitrario unidad de código n... (número arbitrario de dígitos hexadecimales)
Nombres de caracteres universales
\u nnnn (desde C99) Unicode valor en rango permitido;
puede resultar en varias unidades de código
punto de código U+ nnnn
\U nnnnnnnn (desde C99) Unicode valor en rango permitido;
puede resultar en varias unidades de código
punto de código U+ nnnnnnnn

Contenidos

Rango de nombres de caracteres universales

Si un nombre de carácter universal corresponde a un punto de código que no es 0x24 ( '$' ), 0x40 ( '@' ), ni 0x60 ( '`' ) y es menor que 0xA0 , o un punto de código sustituto (el rango 0xD800-0xDFFF , inclusive) , o mayor que 0x10FFFF , es decir, no es un punto de código Unicode (desde C23) , el programa está mal formado. En otras palabras, los miembros del conjunto básico de caracteres fuente y los caracteres de control (en los rangos 0x0-0x1F y 0x7F-0x9F ) no pueden expresarse en nombres de caracteres universales.

(desde C99)

Notas

\ 0 es la secuencia de escape octal más comúnmente utilizada, porque representa el carácter nulo terminador en cadenas terminadas en nulo.

El carácter de nueva línea \n tiene un significado especial cuando se utiliza en E/S en modo texto : se convierte a la secuencia de bytes o byte de nueva línea específico del sistema operativo.

Las secuencias de escape octales tienen un límite de longitud de tres dígitos octales, pero terminan en el primer carácter que no sea 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 representados por el tipo de carácter utilizado en este literal de cadena o constante de carácter ( char , char8_t (desde C23) , char16_t , char32_t (desde C11) , o wchar_t ), el resultado no está especificado.

Un nombre de carácter universal en un literal de cadena estrecha o un literal de cadena de 16 bits (desde C11) puede mapearse a más de una unidad de código, por ejemplo, \U0001f34c son 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 C11) .

(desde C99)

Un nombre de carácter universal correspondiente a un código de punto mayor que 0x10FFFF (que no está definido en ISO/ISC 10646) puede utilizarse en constantes de carácter y literales de cadena . Este uso no está permitido en C++20.

(desde C99)
(hasta C23)

La secuencia de escape del signo de interrogación \ ? se utiliza para evitar que los trigraphs sean interpretados dentro de literales de cadena: una cadena como "??/" se compila como " \" , pero si el segundo signo de interrogación se escapa, como en "? \? /" , se convierte en "??/"

(hasta C23)

Ejemplo

#include <stdio.h>
int main(void)
{
    printf("This\nis\na\ntest\n\nShe said, \"How are you?\"\n");
}

Salida:

This
is
a
test
She said, "How are you?"

Referencias

  • Estándar C17 (ISO/IEC 9899:2018):
  • 5.2.2 Semántica de visualización de caracteres (p: 18-19)
  • 6.4.3 Nombres de caracteres universales (p: 44)
  • 6.4.4.4 Constantes de caracteres (p: 48-50)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 5.2.2 Semántica de visualización de caracteres (p: 24-25)
  • 6.4.3 Nombres de caracteres universales (p: 61)
  • 6.4.4.4 Constantes de caracteres (p: 67-70)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 5.2.2 Semántica de visualización de caracteres (p: 19-20)
  • 6.4.3 Nombres de caracteres universales (p: 53)
  • 6.4.4.4 Constantes de caracteres (p: 59-61)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 2.2.2 Semántica de visualización de caracteres
  • 3.1.3.4 Constantes de caracteres

Véase también

Documentación de C++ para Secuencias de escape