Entre int32
y int32_t
, (y también entre int8
y int8_t
) la diferencia es bastante simple: el estándar C define int8_t
y int32_t
, pero no define nada con nombre int8
o int32
- este último (si es que existe) es probablemente de algún otro encabezado o biblioteca (muy probablemente es anterior a la adición de int8_t
y int32_t
en C99).
Plain int
es bastante diferente a los demás. Donde int8_t
y int32_t
cada uno tiene un tamaño específico, int
puede ser de cualquier tamaño> = 16 bits. En diferentes momentos, tanto 16 bits como 32 bits han sido razonablemente comunes (y para una implementación de 64 bits, probablemente debería ser de 64 bits).
Por otro lado, int
se garantiza que estará presente en cada implementación de C, donde int8_t
y int32_t
no lo estén. Sin embargo, es probable que se cuestione si esto te importa. Si usa C en pequeños sistemas integrados y / o compiladores más antiguos, puede ser un problema. Si lo usa principalmente con un compilador moderno en máquinas de escritorio / servidor, probablemente no lo será.
Vaya, me perdí la parte sobre char
. Usaría en int8_t
lugar de char si (y solo si) desea un tipo de entero garantizado para tener exactamente 8 bits de tamaño. Si desea almacenar caracteres, probablemente desee utilizar char
en su lugar. Su tamaño puede variar (en términos de número de bits) pero se garantiza que sea exactamente de un byte. Sin embargo, hay una pequeña rareza: no hay garantía de si un plano char
está firmado o sin firmar (y muchos compiladores pueden convertirlo en cualquiera de los dos, dependiendo de un indicador de tiempo de compilación). Si necesita asegurarse de que esté firmado o sin firmar, debe especificarlo explícitamente.
bool_t
, nunca había oído hablar de eso antes. El estándar C se define_Bool
como un tipo integrado.bool
se define solo si usted#include <stdbool.h>
(como una macro que se expande a_Bool
).