Biblioteca estándar de C<inttypes.h>

En la programación en C, al manejar tipos de enteros, a menudo necesitamos garantizar la portabilidad del código en diferentes plataformas. Las diferentes plataformas pueden tener diferentes tamaños y representaciones de enteros, lo que puede provocar que el código se comporte de manera inconsistente en distintos entornos.

Para resolver el problema anterior, la biblioteca estándar de C proporciona<inttypes.h>el archivo de cabecera, que define un conjunto de tipos de enteros de tamaño fijo y las macros de formato correspondientes, ayudando a los desarrolladores a escribir código portátil.

inttypes.hEs un archivo de cabecera muy importante en la biblioteca estándar de C. Proporciona un conjunto de tipos de enteros de ancho fijo y las macros de formato correspondientes. Al utilizar estos tipos y macros, los desarrolladores pueden asegurar que el tamaño de los enteros y su salida formateada sean consistentes en diferentes plataformas, evitando así problemas potenciales.

Tipos de enteros de ancho fijo

inttypes.hDefine un conjunto de tipos de enteros de ancho fijo que tienen el mismo tamaño en diferentes plataformas. Estos son los tipos de enteros de ancho fijo más comunes:

  • int8_t: entero con signo de 8 bits
  • uint8_t: entero sin signo de 8 bits
  • int16_t: entero con signo de 16 bits
  • uint16_t: entero sin signo de 16 bits
  • int32_t: entero con signo de 32 bits
  • uint32_t: entero sin signo de 32 bits
  • int64_t: entero con signo de 64 bits
  • uint64_t: entero sin signo de 64 bits

Estos tipos aseguran que el tamaño de los enteros sea consistente en diferentes plataformas, mejorando así la portabilidad del código.

Macros de formato

inttypes.hTambién define un conjunto de macros de formato, utilizadas enprintfyscanffunciones como `printf`, etc., para formatear los tipos de enteros de ancho fijo. Estas macros aseguran que la salida formateada de los enteros sea consistente en diferentes plataformas.

Estas son las macros de formato más comunes:

  • PRId8: se utiliza para formatearint8_tenteros con signo del tipo
  • PRIu8: se utiliza para formatearuint8_tenteros sin signo del tipo
  • PRId16: se utiliza para formatearint16_tenteros con signo del tipo
  • PRIu16: se utiliza para formatearuint16_tenteros sin signo del tipo
  • PRId32: se utiliza para formatearint32_tenteros con signo del tipo
  • PRIu32: se utiliza para formatearuint32_tenteros sin signo del tipo
  • PRId64: se utiliza para formatearint64_tenteros con signo del tipo
  • PRIu64: se utiliza para formatearuint64_tenteros sin signo del tipo

La forma de usar estas macros es la siguiente:

Ejemplo

#include <stdio.h>
#include <inttypes.h>

int main() {
    int32_t myInt = 42;
    printf("The value of myInt is: %" PRId32 "\n", myInt);
    return 0;
}

En el código anterior,PRId32la macro se utiliza para formatearint32_tenteros con signo del tipo, asegurando una salida consistente en diferentes plataformas.

El resultado de salida es:

The value of myInt is: 42

Otras macros

inttypes.hTambién se definen otras macros útiles, por ejemplo:

  • INT8_MIN、INT8_MAX:int8_tvalores mínimo y máximo del tipo
  • UINT8_MAX:uint8_tvalor máximo del tipo
  • INT16_MIN、INT16_MAX:int16_tvalores mínimo y máximo del tipo
  • UINT16_MAX:uint16_tvalor máximo del tipo
  • INT32_MIN、INT32_MAX:int32_tvalores mínimo y máximo del tipo
  • UINT32_MAX:uint32_tvalor máximo del tipo
  • INT64_MIN、INT64_MAX:int64_tvalores mínimo y máximo del tipo
  • UINT64_MAX:uint64_tvalor máximo del tipo

Estas macros pueden ayudar a los desarrolladores a utilizar de manera segura los tipos de enteros de ancho fijo en el código, evitando desbordamientos y otros problemas potenciales.

Ejemplo

A continuación se ofrece un ejemplo completo que utilizainttypes.hel cual demuestra cómo definir y utilizar los tipos de enteros de ancho fijo y sus macros de formato:

Ejemplo

#include <stdio.h>
#include <inttypes.h>

int main() {
    int32_t myInt = 42;
    uint64_t myUInt = 1234567890123456789ULL;

    printf("The value of myInt is: %" PRId32 "\n", myInt);
    printf("The value of myUInt is: %" PRIu64 "\n", myUInt);

    printf("The minimum value of int32_t is: %" PRId32 "\n", INT32_MIN);
    printf("The maximum value of uint64_t is: %" PRIu64 "\n", UINT64_MAX);

    return 0;
}

El resultado de salida es:

The value of myInt is: 42
The value of myUInt is: 1234567890123456789
The minimum value of int32_t is: -2147483648
The maximum value of uint64_t is: 18446744073709551615

En el código anterior, definimos unint32_tentero con signo del tipo y unuint64_tentero sin signo del tipo, y los imprimimos utilizando las macros de formato correspondientes.INT32_MINyUINT64_MAXmacros para imprimir los valores mínimo y máximo de estos tipos.

Otras extensiones