Нет, стандарт C определяет минимальные размеры для целочисленных типов, но не дает никакой гарантии на максимальных размерах.
Реализация должна обеспечивать типы intN_t
, если имеются типы такого размера. Я только упоминаю, что, поскольку у вас есть кросс-платформенный тег - реализация, которая не имеет типа правильной ширины бита, не должна предоставлять эти типы.
Обычно вы можете выбрать (с настройкой, определяющей, например, cc -D_INT16_IS_INT
и #ifdef
s) правильный тип для использования для определенного размера бит. Вы можете разработать необходимые определения для каждой платформы, которую вы хотите поддерживать с помощью кода C, используя CHAR_BIT
и sizeof()
.
Соответствующий раздел проекта C1X (n1362) составляет:
7.18.1.1 Точных ширина целочисленных типов
Названия ЬурейеГо intN_t
обозначает целочисленный тип с ширина N
, без битов дополнений и представления двух дополнений. Таким образом, int8_t
обозначает знаковый целочисленный тип с шириной ровно 8 бит.
Имя typedef uintN_t
обозначает целочисленный тип без знака с шириной N
. Таким образом, uint24_t
обозначает целочисленный тип без знака с шириной ровно 24 бита.
Эти типы являются необязательными. Однако, если реализация предоставляет целочисленные типы с шириной 8, 16, 32 или 64 бита, без битов дополнений и (для подписанных типов), которые имеют представление двух дополнений, оно должно определять соответствующие имена typedef.
Что касается выбора типов, что-то вроде этого должно хватить:
#ifdef INT32_IS_SHORT
typedef short INT32
#endif
#ifdef INT32_IS_INT
typedef int INT32
#endif
#ifdef INT32_IS_LONG
typedef long INT32
#endif
Ваш вопрос очень похож на http://stackoverflow.com/questions/126279/c99-stdint-h-header-and-ms-visual-studio –
@zilgo: ответ может быть аналогичным; вопрос не является. В 126279 OP уже знает stdint.h; NawaMan (по-видимому) не был, задавая вопрос. –
Обратите внимание, что последнее предположение неверно. Различия в размере int не обязательно блокируют компиляцию на других архитектурах, но скрытые предположения, такие как 'i == i & 0xFFFFFFFF', могут. Хороший программист пишет '& 0xFFFF', когда ему нужен математический modulo 2^16, и ему все равно, имеет ли' unsigned short' ровно 16 бит. – MSalters