Стандартная библиотека C<inttypes.h>

В программировании на C при работе с целочисленными типами часто требуется обеспечить переносимость кода между разными платформами. Разные платформы могут иметь разные размеры и представления целых чисел, из-за чего код может вести себя несогласованно в разных средах.

Для решения вышеуказанных проблем стандартная библиотека C предоставляет<inttypes.h>Заголовочный файл, который определяет набор целочисленных типов фиксированного размера и соответствующие макросы форматирования, помогая разработчикам писать переносимый код.

inttypes.hявляется очень важным заголовочным файлом в стандартной библиотеке C. Он предоставляет набор целочисленных типов фиксированной ширины и соответствующие макросы форматирования. Используя эти типы и макросы, разработчики могут гарантировать, что размеры целых чисел и форматированный вывод будут согласованы на разных платформах, тем самым избегая потенциальных проблем.

Целочисленные типы фиксированной ширины

inttypes.hопределяет набор целочисленных типов фиксированной ширины, которые имеют одинаковый размер на разных платформах. Ниже приведены распространённые целочисленные типы фиксированной ширины:

  • int8_t: 8-битное целое со знаком
  • uint8_t: 8-битное беззнаковое целое
  • int16_t: 16-битное целое со знаком
  • uint16_t: 16-битное беззнаковое целое
  • int32_t: 32-битное целое со знаком
  • uint32_t: 32-битное беззнаковое целое
  • int64_t: 64-битное целое со знаком
  • uint64_t: 64-битное беззнаковое целое

Эти типы гарантируют, что размеры целых чисел согласованы на разных платформах, тем самым повышая переносимость кода.

Макросы форматирования

inttypes.hТакже определяет набор макросов форматирования, используемых вprintfиscanfформатировании целочисленных типов фиксированной ширины в таких функциях, как. Эти макросы гарантируют, что форматированный вывод целых чисел согласован на разных платформах.

Ниже приведены распространённые макросы форматирования:

  • PRId8: используется для форматированияint8_tзнаковое целое типа
  • PRIu8: используется для форматированияuint8_tбеззнаковое целое типа
  • PRId16: используется для форматированияint16_tзнаковое целое типа
  • PRIu16: используется для форматированияuint16_tбеззнаковое целое типа
  • PRId32: используется для форматированияint32_tзнаковое целое типа
  • PRIu32: используется для форматированияuint32_tбеззнаковое целое типа
  • PRId64: используется для форматированияint64_tзнаковое целое типа
  • PRIu64: используется для форматированияuint64_tбеззнаковое целое типа

Эти макросы используются следующим образом:

Пример

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

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

В приведённом выше коде,PRId32Макрос для форматированияint32_tтип целого числа со знаком, обеспечивающий согласованный вывод на разных платформах.

Результат вывода:

The value of myInt is: 42

Другие макросы

inttypes.hтакже определяет некоторые другие полезные макросы, например:

  • INT8_MIN、INT8_MAX:int8_tминимальное и максимальное значения типа
  • UINT8_MAX:uint8_tМаксимальное значение типа
  • INT16_MIN、INT16_MAX:int16_tминимальное и максимальное значения типа
  • UINT16_MAX:uint16_tМаксимальное значение типа
  • INT32_MIN、INT32_MAX:int32_tминимальное и максимальное значения типа
  • UINT32_MAX:uint32_tМаксимальное значение типа
  • INT64_MIN、INT64_MAX:int64_tминимальное и максимальное значения типа
  • UINT64_MAX:uint64_tМаксимальное значение типа

Эти макросы могут помочь разработчикам безопасно использовать целочисленные типы фиксированной ширины в коде, избегая переполнения и других потенциальных проблем.

Пример

Ниже показано использованиеinttypes.hпредставляет собой полный пример, показывающий, как определять и использовать целочисленные типы фиксированной ширины и их макросы форматирования:

Пример

#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("Значение myUInt: %" PRIu64 "\n", myUInt);

    printf("Минимальное значение int32_t: %" PRId32 "\n", INT32_MIN);
    printf("Максимальное значение uint64_t: %" PRIu64 "\n", UINT64_MAX);

    return 0;
}

Результат вывода:

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

В приведённом выше коде мы определилиint32_tзнаковое целое этого типа иuint64_tбеззнаковый целочисленный тип, и использовали соответствующие макросы форматирования для их вывода. Мы также использовалиINT32_MINиUINT64_MAXмакросы для вывода минимального и максимального значений этих типов.

Другие расширения