C Standard Library<inttypes.h>

In C programming, when dealing with integer types, we often need to ensure that code is portable across different platforms. Different platforms may have different integer sizes and representations, which can cause code to behave inconsistently in different environments.

To solve the above problems, the C standard library provides<inttypes.h>The header file, which defines a set of fixed-size integer types and corresponding formatting macros, helping developers write portable code.

inttypes.his a very important header file in the C standard library. It provides a set of fixed-width integer types and corresponding formatting macros. By using these types and macros, developers can ensure that integer sizes and formatted output are consistent across different platforms, thereby avoiding potential problems.

Fixed-width integer types

inttypes.hdefines a set of fixed-width integer types, which have the same size on different platforms. The following are common fixed-width integer types:

  • int8_t: 8-bit signed integer
  • uint8_t: 8-bit unsigned integer
  • int16_t: 16-bit signed integer
  • uint16_t: 16-bit unsigned integer
  • int32_t: 32-bit signed integer
  • uint32_t: 32-bit unsigned integer
  • int64_t: 64-bit signed integer
  • uint64_t: 64-bit unsigned integer

These types ensure that integer sizes are consistent across different platforms, thereby improving code portability.

Formatting macros

inttypes.hAlso defines a set of formatting macros, used inprintfandscanfformat fixed-width integer types in functions such as. These macros ensure that the formatted output of integers is consistent across different platforms.

The following are common formatting macros:

  • PRId8: Used for formattingint8_tsigned integer of the type
  • PRIu8: Used for formattinguint8_tunsigned integer of the type
  • PRId16: Used for formattingint16_tsigned integer of the type
  • PRIu16: Used for formattinguint16_tunsigned integer of the type
  • PRId32: Used for formattingint32_tsigned integer of the type
  • PRIu32: Used for formattinguint32_tunsigned integer of the type
  • PRId64: Used for formattingint64_tsigned integer of the type
  • PRIu64: Used for formattinguint64_tunsigned integer of the type

These macros are used as follows:

Example

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

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

In the above code,PRId32Macro for formattingint32_ttype of signed integer, ensuring consistent output across different platforms.

The output result is:

The value of myInt is: 42

Other macros

inttypes.halso defines some other useful macros, for example:

  • INT8_MIN、INT8_MAX:int8_tthe minimum and maximum values of the type
  • UINT8_MAX:uint8_tMaximum value of the type
  • INT16_MIN、INT16_MAX:int16_tthe minimum and maximum values of the type
  • UINT16_MAX:uint16_tMaximum value of the type
  • INT32_MIN、INT32_MAX:int32_tthe minimum and maximum values of the type
  • UINT32_MAX:uint32_tMaximum value of the type
  • INT64_MIN、INT64_MAX:int64_tthe minimum and maximum values of the type
  • UINT64_MAX:uint64_tMaximum value of the type

These macros can help developers safely use fixed-width integer types in code, avoiding overflow and other potential problems.

Example

The following is a use ofinttypes.his a complete example showing how to define and use fixed-width integer types and their formatting macros:

Example

#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;
}

The output result is:

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

In the above code, we defined aint32_tsigned integer of the type and auint64_ttype of unsigned integer, and used the corresponding formatting macros to print them. We also usedINT32_MINandUINT64_MAXmacros to print the minimum and maximum values of these types.

other extensions