Tipos de enteros de ancho exacto en C (stdint.h)

Me gustaría que los tipos char, short e int sean de 1, 2 y 4 bytes de ancho. He incluido un encabezado stdint.h en mis fonts. ¿Esto garantiza que los tipos enteros int8_t, int16_t e int32_t serán de anchos especificados? ¿Cuál es la mejor manera de lograr esto?

Si estos tipos existen, tienen el ancho correcto y están codificados en el complemento de dos.

Edición: debería poder comprobar si los tipos existen con algo como

#ifdef INT32_MAX ... #endif 

pero en todas las architectures de usuario final (PC, etc.) estos tipos existen generalmente.

Todo el propósito de los tipos definidos en stdint.h es que tengan un ancho específico. Así que int8_t tendrá 8 bits de ancho, int16_t – 16 bits de ancho, etc.

stdint.h algunos tipos de enteros de ancho exacto. Estos son (de wikipedia ):

 Specifier Signing Bits Bytes int8_t Signed 8 1 uint8_t Unsigned 8 1 int16_t Signed 16 2 uint16_t Unsigned 16 2 int32_t Signed 32 4 uint32_t Unsigned 32 4 int64_t Signed 64 8 uint64_t Unsigned 64 8 

Úsalos si quieres saber cuál es el tamaño definitivo. C99 requiere que estos tipos tengan los tamaños especificados. Todos los demás tipos dependen de la plataforma.

Se garantiza que otros tipos tienen un ancho mínimo determinado, según los limits.h . Pero igualmente podrían ser más grandes que eso. Depende de la implementación.

Stdint.h de C99 no garantiza realmente que estos tipos existan. Para citar wikipedia :

Estos tipos son opcionales, a menos que la implementación admita tipos con anchos de 8, 16, 32 o 64, luego los tipeará a los tipos correspondientes con la N. correspondiente.

Sin embargo, si existen, serán los anchos correctos.

Puede consultar: Tamaño de int en C en diferentes architectures.