Buscar..


Observaciones

El término literal se usa comúnmente para describir una secuencia de caracteres en un código C que designa un valor constante como un número (por ejemplo, 0 ) o una cadena (por ejemplo, "C" ). Estrictamente hablando, el estándar usa el término constante para constantes enteras, constantes flotantes, constantes de enumeración y constantes de caracteres, reservando el término 'literal' para literales de cadena, pero esto no es un uso común.

Los literales pueden tener prefijos o sufijos (pero no ambos) que son caracteres adicionales que pueden iniciar o finalizar un literal para cambiar su tipo predeterminado o su representación.

Literales enteros

Los literales enteros se utilizan para proporcionar valores integrales. Se admiten tres bases numéricas, indicadas por prefijos:

Base Prefijo Ejemplo
Decimal Ninguna 5
Octal 0 0345
Hexadecimal 0x o 0X 0x12AB , 0X12AB , 0x12ab , 0x12Ab

Tenga en cuenta que esta escritura no incluye ningún signo, por lo que los literales enteros son siempre positivos. Algo así como -1 se trata como una expresión que tiene un entero literal ( 1 ) que se niega con un -

El tipo de un entero decimal decimal es el primer tipo de datos que puede ajustarse al valor de int y long . Desde C99, long long también es compatible con literales muy grandes.

El tipo de literal entero octal o hexadecimal es el primer tipo de datos que puede ajustarse al valor de int , unsigned , long y unsigned long . Desde C99, también se admiten largos literales long long y unsigned long long para literales muy grandes.

Usando varios sufijos, se puede cambiar el tipo predeterminado de un literal.

Sufijo Explicación
L , l long int
LL , ll (desde C99) long long int
U , u unsigned

Los sufijos U y L / LL se pueden combinar en cualquier orden y caso. Es un error duplicar los sufijos (por ejemplo, proporcionar dos sufijos U ) incluso si tienen casos diferentes.

Literales de cuerda

Los literales de cadena se utilizan para especificar matrices de caracteres. Son secuencias de caracteres encerrados entre comillas dobles (por ejemplo, "abcd" y tienen el tipo char* ).

El prefijo L hace que el literal sea una matriz de caracteres anchos, de tipo wchar_t* . Por ejemplo, L"abcd" .

Desde C11, hay otros prefijos de codificación, similares a L :

prefijo tipo de base codificación
ninguna char dependiente de la plataforma
L wchar_t dependiente de la plataforma
u8 char UTF-8
u char16_t usualmente UTF-16
U char32_t usualmente UTF-32

Para los dos últimos, se puede consultar con macros de prueba de características si la codificación es efectivamente la codificación UTF correspondiente.

Literales de punto flotante

Los literales de punto flotante se utilizan para representar números reales firmados. Los siguientes sufijos se pueden usar para especificar el tipo de un literal:

Sufijo Tipo Ejemplos
ninguna double 3.1415926 -3E6
f , F float 3.1415926f 2.1E-6F
l , L long double 3.1415926L 1E126L

Para usar estos sufijos, el literal debe ser un literal de punto flotante. Por ejemplo, 3f es un error, ya que 3 es un literal entero, mientras que 3.f o 3.0f son correctos. Para el long double , la recomendación es usar siempre L mayúscula para facilitar la lectura.

Literales de personajes

Los literales de caracteres son un tipo especial de literales enteros que se utilizan para representar un carácter. Están entre comillas simples, por ejemplo, 'a' y tienen el tipo int . El valor del literal es un valor entero de acuerdo con el conjunto de caracteres de la máquina. No permiten sufijos.

El prefijo L antes de un literal de carácter lo convierte en un carácter ancho del tipo wchar_t . Del mismo modo, ya que los prefijos C11 u y U convierten en caracteres anchos de tipo char16_t y char32_t , respectivamente.

Cuando se pretende representar ciertos caracteres especiales, como un carácter que no se puede imprimir, se utilizan secuencias de escape. Las secuencias de escape utilizan una secuencia de caracteres que se traducen en otro carácter. Todas las secuencias de escape constan de dos o más caracteres, el primero de los cuales es una barra invertida \ . Los caracteres que siguen inmediatamente a la barra invertida determinan qué carácter literal se interpreta la secuencia.

Secuencia de escape Personaje representado
\b Retroceso
\f Alimentación de forma
\n Avance de línea (nueva línea)
\r Retorno de carro
\t Pestaña horizontal
\v Pestaña vertical
\\ Barra invertida
\' Comilla simple
\" Comilla doble
\? Signo de interrogación
\nnn Valor octal
\xnn ... Valor hexadecimal
C89
Secuencia de escape Personaje representado
\a Alerta (pitido, campana)
C99
Secuencia de escape Personaje representado
\unnnn Nombre del personaje universal
\Unnnnnnnn Nombre del personaje universal

Un nombre de carácter universal es un punto de código Unicode. Un nombre de carácter universal puede asignarse a más de un carácter. Los dígitos n se interpretan como dígitos hexadecimales. Dependiendo de la codificación UTF en uso, una secuencia de nombre de carácter universal puede resultar en un punto de código que consta de varios caracteres, en lugar de un solo char carácter normal.

Cuando se utiliza la secuencia de escape de alimentación de línea en el modo de texto I / O, se convierte a la secuencia de bytes o bytes de nueva línea específicos del sistema operativo.

La secuencia de escape de signo de interrogación se utiliza para evitar los trigrafos . Por ejemplo, ??/ se compila como el trigraph que representa un carácter de barra invertida '\' , pero usar ?\?/ Daría como resultado la cadena "??/" .

Puede haber uno, dos o tres números octales n en la secuencia de escape del valor octal.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow