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
C89
Séquence d'échappement Personnage représenté
\a Alerte (bip, cloche)
C99
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.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow