Возможно ли, чтобы int_least16_t был псевдонимом для int, а не для short? - PullRequest
0 голосов
/ 22 апреля 2019

Из стандарта C99 я вижу, что ширина int_least16_t гарантированно не менее 16 бит.

7.18.1.2 Целочисленные типы минимальной ширины

...

Имя typedef uint_leastN_t обозначает целочисленный тип без знака с шириной не менее N, так что целочисленный тип без знака с меньшим размером не имеет по крайней мере указанной ширины. Таким образом, uint_least16_t обозначает целочисленный тип без знака с шириной не менее 16 бит.

...

Из того, что я могу сказать, стандарт только накладывает ограничения на минимальную ширину типов, а не обязательно на их ранг. Таким образом, в архитектуре, где int и short имеют ширину 16 битов, возможно ли, что int_least16_t может быть псевдонимом для int, несмотря на то, что short имеет меньший ранг?

1 Ответ

2 голосов
/ 22 апреля 2019

Из того, что я могу сказать, стандарт только накладывает ограничения на минимальная ширина типов, и не обязательно их ранг. Так на архитектура, где int и short имеют ширину 16 бит, Возможно, что int_least16_t может быть псевдонимом для int, несмотря на факт, что шорт имеет меньшее звание?

Вы процитировали полный текст соответствующего стандарта. Да, если short имеет тот же размер, что и int, и не существует более узкого целочисленного типа по крайней мере с 16 битами, то int_least16_t может быть int.

Действительно, если реализация поддерживает только 64-битные целые числа, так что long long int, long int, int и short int были бы все 64-битными, тогда int_least16_t может быть long long int. Или, если signed char имеет ширину 16 бит в той или иной реализации, тогда int_least16_t может быть signed char. В некоторых случаях это может быть расширенный целочисленный тип со знаком вместо любого из вышеперечисленных.

...