Есть ли в GCC целые числа фиксированного размера?
-
06-07-2019 - |
Вопрос
В компиляторе MSVC ++ можно использовать __int8
, __int16
, __int32
и аналогичные типы для целых чисел с определенными размерами. Это чрезвычайно полезно для приложений, которым необходимо работать с низкоуровневыми структурами данных, такими как пользовательские форматы файлов, структуры данных аппаратного контроля и т. П.
Есть ли аналогичный эквивалент, который я могу использовать в компиляторе GCC?
Решение
Стандарт ISO C, начиная со стандарта C99, добавляет стандартный заголовок <stdint.h>
, который определяет их:
uint8_t - unsigned 8 bit
int8_t - signed 8 bit
uint16_t - unsigned 16 bit
int16_t - signed 16 bit
uint32_t - unsigned 32 bit
int32_t - signed 32 bit
uint64_t - unsigned 64 bit
int64_t - signed 64 bit
Я использую эти типы все время.
Эти типы определяются только в том случае, если реализация поддерживает предопределенные типы с соответствующими размерами и характеристиками (что большинство из них).
(u)int_leastN_t
также определяет типы с именами в форме (u)int_fastN_t
(типы, у которых не менее указанной ширины) и <=> (" fasttest " типы, имеющие как минимум указанную ширину); эти типы являются обязательными.
Если вы используете старую реализацию, которая не поддерживает <=>, вы можете свернуть свою собственную; одной из реализаций является цитата Дуга Гвина &; q8 " ;. р>