C Language
Littéraux pour les nombres, les caractères et les chaînes
Recherche…
Remarques
Le terme littéral est couramment utilisé pour décrire une séquence de caractères dans un code C qui désigne une valeur constante telle qu'un nombre (par exemple 0
) ou une chaîne (par exemple, "C"
). Strictement parlant, le standard utilise le terme constant pour les constantes entières, les constantes flottantes, les constantes d'énumération et les constantes de caractères, réservant le terme «littéral» aux littéraux de chaîne, mais ce n'est pas un usage courant.
Les littéraux peuvent avoir des préfixes ou des suffixes (mais pas les deux) qui sont des caractères supplémentaires pouvant démarrer ou terminer un littéral pour modifier son type par défaut ou sa représentation.
Littéraux entiers
Les littéraux entiers sont utilisés pour fournir des valeurs intégrales. Trois bases numériques sont supportées, indiquées par des préfixes:
Base | Préfixe | Exemple |
---|---|---|
Décimal | Aucun | 5 |
Octal | 0 | 0345 |
Hexadécimal | 0x ou 0X | 0x12AB , 0X12AB , 0x12ab , 0x12Ab |
Notez que cette écriture n'inclut aucun signe, donc les littéraux entiers sont toujours positifs. Quelque chose comme -1
est traité comme une expression avec un entier littéral ( 1
) qui est annulé par un -
Le type d'un littéral entier décimal est le premier type de données pouvant correspondre à la valeur d' int
et de long
. Depuis C99, long long
est également pris en charge pour les très grands littéraux.
Le type d'un littéral entier octal ou hexadécimal est le premier type de données pouvant correspondre à la valeur de int
, unsigned
, long
et unsigned long
. Depuis C99, long long
et unsigned long long
sont également pris en charge pour les très grands littéraux.
En utilisant différents suffixes, le type par défaut d'un littéral peut être modifié.
Suffixe | Explication |
---|---|
L , l | long int |
LL , ll (depuis C99) | long long int |
U , u | unsigned |
Les suffixes U et L / LL peuvent être combinés dans n'importe quel ordre et cas. C'est une erreur de dupliquer des suffixes (par exemple, fournir deux suffixes U
) même s'ils ont des cas différents.
Littéraux de chaîne
Les littéraux de chaîne sont utilisés pour spécifier des tableaux de caractères. Ce sont des séquences de caractères entre guillemets (par exemple "abcd"
et ont le type char*
).
Le préfixe L
fait du littéral un tableau de caractères large, de type wchar_t*
. Par exemple, L"abcd"
.
Depuis C11, il existe d'autres préfixes de codage, similaires à L
:
préfixe | type de base | codage |
---|---|---|
aucun | char | dépend de la plate-forme |
L | wchar_t | dépend de la plate-forme |
u8 | char | UTF-8 |
u | char16_t | généralement UTF-16 |
U | char32_t | généralement UTF-32 |
Pour les deux derniers, il peut être interrogé avec des macros de test de fonctionnalité si le codage correspond effectivement au codage UTF correspondant.
Littéraux à virgule flottante
Les littéraux à virgule flottante sont utilisés pour représenter les nombres réels signés. Les suffixes suivants peuvent être utilisés pour spécifier le type d'un littéral:
Suffixe | Type | Exemples |
---|---|---|
aucun | double | 3.1415926 -3E6 |
f , F | float | 3.1415926f 2.1E-6F |
l , L | long double | 3.1415926L 1E126L |
Pour utiliser ces suffixes, le littéral doit être un littéral à virgule flottante. Par exemple, 3f
est une erreur, puisque 3
est un littéral entier, tandis que 3.f
ou 3.0f
sont corrects. Pour le long double
, la recommandation est de toujours utiliser le capital L
pour des raisons de lisibilité.
Littéraux de caractère
Les littéraux de caractères sont un type spécial de littéraux entiers utilisés pour représenter un caractère. Ils sont entre guillemets simples, par exemple 'a'
et ont le type int
. La valeur du littéral est une valeur entière en fonction du jeu de caractères de la machine. Ils ne permettent pas les suffixes.
Le préfixe L
précédant un littéral de caractère en fait un caractère large de type wchar_t
. De même, les préfixes C11 u
et U
font des caractères larges de type char16_t
et char32_t
, respectivement.
Lorsque vous souhaitez représenter certains caractères spéciaux, tels qu'un caractère non imprimable, des séquences d'échappement sont utilisées. Les séquences d'échappement utilisent une séquence de caractères traduite dans un autre personnage. Toutes les séquences d'échappement se composent de deux caractères ou plus, le premier d'entre eux étant une barre oblique inverse \
. Les caractères qui suivent immédiatement la barre oblique inverse déterminent le caractère littéral interprété par la séquence.
Séquence d'échappement | Personnage représenté |
---|---|
\b | Retour arrière |
\f | Flux de formulaire |
\n | Line feed (nouvelle ligne) |
\r | Retour de voiture |
\t | Onglet horizontal |
\v | Onglet vertical |
\\ | Barre oblique inverse |
\' | Guillemet simple |
\" | Guillemet double |
\? | Point d'interrogation |
\nnn | Valeur octale |
\xnn ... | Valeur hexadécimale |
Séquence d'échappement | Personnage représenté |
---|---|
\a | Alerte (bip, cloche) |
Séquence d'échappement | Personnage représenté |
---|---|
\unnnn | Nom de personnage universel |
\Unnnnnnnn | Nom de personnage universel |
Un nom de caractère universel est un point de code Unicode. Un nom de caractère universel peut correspondre à plusieurs caractères. Les chiffres n
sont interprétés comme des chiffres hexadécimaux. Selon l'encodage UTF en cours d' utilisation, une séquence de nom de caractère universel peut donner lieu à un point de code qui se compose de plusieurs caractères, au lieu d'un seul normale char
caractère.
Lors de l'utilisation de la séquence d'échappement du saut de ligne en mode texte, elle est convertie en octet ou en octet de nouvelle ligne spécifique au système d'exploitation.
La séquence d'échappement de point d'interrogation est utilisée pour éviter les trigraphes . Par exemple, ??/
est compilé en tant que trigraphe représentant un caractère barre oblique inverse '\'
, mais en utilisant ?\?/
Entraînerait la chaîne "??/"
.
Il peut y avoir un, deux ou trois nombres octaux n
dans la séquence d'échappement de la valeur octale.