#c #types #integer #int #stdint
#c #типы #целое #int #stdint
Вопрос:
Из стандарта 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:
Из того, что я могу сказать, стандарт устанавливает ограничения только на минимальную ширину типов и не обязательно на их ранг. Итак, в архитектуре, где int и short имеют ширину 16 бит, возможно ли, что int_least16_t может быть псевдонимом для int, несмотря на то, что short имеет меньший ранг?
Вы процитировали весь соответствующий текст стандарта. Да, если 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
. Или при некоторых обстоятельствах это может быть расширенный целочисленный тип со знаком вместо любого из вышеперечисленных.