Существуют ли фиксированные целые числа в GCC?

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

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

Ответ 1

Стандарт 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>, вы можете перевернуть свой собственный; одна реализация Doug Gwyn "q8" .