Возможно ли, чтобы int_least16_t был псевдонимом для int, а не short?

#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 . Или при некоторых обстоятельствах это может быть расширенный целочисленный тип со знаком вместо любого из вышеперечисленных.