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

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

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

Стандарт ISO C, начиная с стандарта C99, добавляет стандартный заголовок который определяет следующие:

 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 («самые быстрые» типы, которые имеют как минимум указанную ширину); эти типы являются обязательными.

Если вы используете старую реализацию, не поддерживающую , вы можете использовать ее самостоятельно; одна реализация – «q8» Дуга Гвина .