Namespaces
Variants

Escape sequences

From cppreference.net

Les séquences d'échappement sont utilisées pour représenter certains caractères spéciaux dans les littéraux de chaîne et les constantes de caractères .

Les séquences d'échappement suivantes sont disponibles. La norme ISO C exige un diagnostic si la barre oblique inverse est suivie d'un caractère non listé ici :

Séquence
d'échappement
Description Représentation
Séquences d'échappement simples
\' guillemet simple octet 0x27 en codage ASCII
\" guillemet double octet 0x22 en codage ASCII
\? point d'interrogation octet 0x3f en codage ASCII
\\ barre oblique inverse octet 0x5c en codage ASCII
\a sonnerie audible octet 0x07 en codage ASCII
\b retour arrière octet 0x08 en codage ASCII
\f saut de page octet 0x0c en codage ASCII
\n saut de ligne octet 0x0a en codage ASCII
\r retour chariot octet 0x0d en codage ASCII
\t tabulation horizontale octet 0x09 en codage ASCII
\v tabulation verticale octet 0x0b en codage ASCII
Séquences d'échappement numériques
\ nnn valeur octale arbitraire unité de code nnn
\x n... valeur hexadécimale arbitraire unité de code n... (nombre arbitraire de chiffres hexadécimaux)
Noms de caractères universels
\u nnnn (depuis C99) Unicode valeur dans la plage autorisée ;
peut produire plusieurs unités de code
point de code U+ nnnn
\U nnnnnnnn (depuis C99) Unicode valeur dans la plage autorisée ;
peut produire plusieurs unités de code
point de code U+ nnnnnnnn

Table des matières

Plage des noms de caractères universels

Si un nom de caractère universel correspond à un point de code qui n'est pas 0x24 ( '$' ), 0x40 ( '@' ), ni 0x60 ( '`' ) et inférieur à 0xA0 , ou un point de code substitut (la plage 0xD800-0xDFFF , inclus) , ou supérieur à 0x10FFFF , c'est-à-dire pas un point de code Unicode (depuis C23) , le programme est mal formé. En d'autres termes, les membres du jeu de caractères de base de la source et les caractères de contrôle (dans les plages 0x0-0x1F et 0x7F-0x9F ) ne peuvent pas être exprimés en noms de caractères universels.

(depuis C99)

Notes

\ 0 est la séquence d'échappement octale la plus couramment utilisée, car elle représente le caractère nul de terminaison dans les chaînes de caractères terminées par un nul.

Le caractère de nouvelle ligne \n a une signification particulière lorsqu'il est utilisé dans les entrées/sorties en mode texte : il est converti en séquence d'octets ou octet de nouvelle ligne spécifique au système d'exploitation.

Les séquences d'échappement octales ont une limite de longueur de trois chiffres octaux mais se terminent au premier caractère qui n'est pas un chiffre octal valide si celui-ci est rencontré plus tôt.

Les séquences d'échappement hexadécimales n'ont pas de limite de longueur et se terminent au premier caractère qui n'est pas un chiffre hexadécimal valide. Si la valeur représentée par une seule séquence d'échappement hexadécimale ne correspond pas à la plage de valeurs représentée par le type de caractère utilisé dans ce littéral de chaîne ou cette constante de caractère ( char , char8_t (depuis C23) , char16_t , char32_t (depuis C11) , ou wchar_t ), le résultat n'est pas spécifié.

Un nom de caractère universel dans un littéral de chaîne étroite ou un littéral de chaîne 16 bits (depuis C11) peut correspondre à plus d'une unité de code, par exemple \U0001f34c représente 4 char unités de code en UTF-8 ( \xF0\x9F\x8D\x8C ) et 2 char16_t unités de code en UTF-16 ( \xD83C\xDF4C ) (depuis C11) .

(depuis C99)

Un nom de caractère universel correspondant à un point de code supérieur à 0x10FFFF (qui n'est pas défini dans ISO/ISC 10646) peut être utilisé dans les constantes de caractère et les littéraux de chaîne . Cette utilisation n'est pas autorisée en C++20.

(depuis C99)
(jusqu'à C23)

La séquence d'échappement du point d'interrogation \ ? est utilisée pour empêcher l'interprétation des trigraphes dans les littéraux de chaîne : une chaîne telle que "??/" est compilée comme " \" , mais si le second point d'interrogation est échappé, comme dans "? \? /" , elle devient "??/"

(jusqu'en C23)

Exemple

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

Sortie :

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

Références

  • Norme C17 (ISO/CEI 9899:2018) :
  • 5.2.2 Sémantique d'affichage des caractères (p: 18-19)
  • 6.4.3 Noms de caractères universels (p: 44)
  • 6.4.4.4 Constantes de caractère (p: 48-50)
  • Norme C11 (ISO/IEC 9899:2011) :
  • 5.2.2 Sémantique d'affichage des caractères (p: 24-25)
  • 6.4.3 Noms de caractères universels (p: 61)
  • 6.4.4.4 Constantes de caractère (p: 67-70)
  • Norme C99 (ISO/CEI 9899:1999) :
  • 5.2.2 Sémantique d'affichage des caractères (p: 19-20)
  • 6.4.3 Noms de caractères universels (p: 53)
  • 6.4.4.4 Constantes de caractères (p: 59-61)
  • Norme C89/C90 (ISO/CEI 9899:1990) :
  • 2.2.2 Sémantique d'affichage des caractères
  • 3.1.3.4 Constantes de caractères

Voir aussi

Documentation C++ pour Séquences d'échappement