"int" действительно требовалось как минимум "короткий" в C? - программирование
Подтвердить что ты не робот

"int" действительно требовалось как минимум "короткий" в C?

Я читал пару раз в разных источниках (например, Wikipedia: http://en.wikipedia.org/wiki/C_variable_types_and_declarations#Size), что в C длинный длинный не меньше длинной, которая не меньше, чем int, которая не меньше короткой.

Однако я рассмотрел это в стандартах C90 и C99 и не нашел соответствующего предложения. Я нашел только, что C90 и C99 определяют минимальные размеры (раздел 5.2.4.2.1 в стандартах C90 и C99), но не их размеры по отношению друг к другу. Я что-то пропустил в стандартах?

4b9b3361

Ответ 1

6.3.1.1 определяет относительные числа преобразования целочисленного числа любых двух целых типов. Это абстрактная концепция, которая подразумевает только определение взаимосвязи между двумя типами; нет значения, определенного как ранг любого типа.

6.2.5p8 говорит:

Для любых двух целых типов с одинаковой подписью и разными целочисленный ранг преобразования (см. 6.3.1.1), диапазон значений типа с меньшим целым числом ранга преобразования является поддиапазоном значений другой тип.

Он ничего не говорит об их относительных размерах, и на самом деле теоретически возможно, чтобы соответствующая (но преднамеренно извращенная) реализация имела sizeof (short) > sizeof (int). Это возможно только в том случае, если short имеет больше битов дополнения (бит, которые не вносят вклад в значение), чем int. Это маловероятно; большинство реализаций вообще не имеют битов заполнения, и я не знаю реализаций, где отношения диапазонов целочисленных типов отличаются от отношений их размеров.

Ссылка: либо N1256, последний проект C99, или N1570, последний проект C2011.

Ответ 2

Я предполагаю, что статья Википедии ссылается на диапазон значений этих целых типов, а не на их размер (как сообщается sizeof).

От C99 стандартный черновик N1256:

6.3.1.1/1

Ранг long long int должен быть больше ранга long int, что должно быть больше ранга int, которое должно быть больше ранга short int, которое должно быть больше ранга signed char.

6.2.5/8

Для любых двух целых типов с одинаковой степенью соответствия и разного целочисленного преобразования (см. 6.3.1.1), диапазон значений типа с меньшим целым числом ранга преобразования равен поддиапазон значений другого типа.

Ответ 3

От C2011 Стандарт

6.3.1.1/1

- ранг long long int должен быть больше ранга long int, который должен быть больше ранга int, который должен быть больше ранга short int, который должен быть больше ранга , подписанного char.