how - lenguaje c char
¿Qué cuenta como tipo de personaje en C11? (2)
Lo que realmente pertenece al "tipo de personaje" en C11 - además de char
por supuesto?
Para ser más precisos, las excepciones especiales para el tipo de carácter (por ejemplo, a cualquier objeto se puede acceder mediante una expresión lvalue del tipo de carácter - ver §6.5 / 7 en el estándar C11), ¿a qué tipos concretos se aplican? Parece que se aplican a uint8_t
e int8_t
desde stdint.h
, pero ¿esto está garantizado? Por otro lado, gcc no considera a char16_t
de uchar.h
como un "tipo de carácter".
Sólo char
, signed char
y unsigned char
1 .
Los tipos uint8_t
, int8_t
, char16_t
, o cualquier tipo en la forma intN_t
o charN_t
, pueden o no ser sinónimos para un tipo de carácter.
1 (Citado de: ISO / IEC 9899: 201x 6.2.5 Tipos 15)
Los tres tipos char, signed char y unsigned char se denominan colectivamente tipos de caracteres.
char
, signed char
y unsigned char
son los tipos de caracteres en C11. Esto es lo mismo desde C89.
Tratar int8_t
(o uint8_t
) como un tipo de carácter tiene muchos problemas.
- Ellos son opcionales
- Es posible que no existan si
CHAR_BIT > 8
. - Definido para funcionar si la implementación utiliza la representación de complemento de 2 (que es la más común). Pero son otras representaciones, a saber, el complemento 1 y la magnitud de signo definidos / permitidos por el estándar C.
Dado que son, si existen, typedef''ed a un tipo existente, probablemente pueda salirse con la int8_t
usando int8_t
o uint8_t
como un tipo de carácter en la práctica. Pero el estándar no garantiza nada y no hay razón para tratarlos como tales de todos modos cuando tienes los tipos de caracteres reales .