Есть ли в GCC целые числа фиксированного размера? - PullRequest
11 голосов
/ 06 ноября 2008

В компиляторе MSVC ++ можно использовать __int8, __int16, __int32 и аналогичные типы для целых чисел с определенными размерами. Это чрезвычайно полезно для приложений, которым необходимо работать с низкоуровневыми структурами данных, такими как пользовательские форматы файлов, структуры данных аппаратного контроля и т. П.

Есть ли аналогичный эквивалент, который я могу использовать на компиляторе GCC?

1 Ответ

29 голосов
/ 06 ноября 2008

Стандарт 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

Я использую эти типы все время.

Эти типы определяются только в том случае, если реализация поддерживает предопределенные типы с соответствующими размерами и характеристиками (что большинство из них).

<stdint.h> также определяет типы с именами вида (u)int_leastN_t (типы, которые имеют не менее указанной ширины) и (u)int_fastN_t ("самые быстрые" типы, имеющие по крайней мере указанную ширину ); эти типы являются обязательными.

Если вы используете старую реализацию, которая не поддерживает <stdint.h>, вы можете свернуть свою собственную; одна из реализаций - "q8" Дуга Гвина .

...