Почему требуются типы * _leastN_t и * _fastN_t, а не дополнительные?

Все мы знаем, что целочисленные определения типа точной ширины, определенные в C99 stdint.h являются необязательными, определяемыми только в том случае, если архитектура имеет примитивные типы этих значений ширины, знаков и т. д.

Тем не менее, я только сейчас понял, что [u]int_(fast|least)N_t являются не необязательно, но требуется. См. ISO / IEC 9899: 9999, раздел 7.18.1:

[7.18.1.2] 3 Требуются следующие типы:

int_least8_t
int_least16_t
int_least32_t
int_least64_t
uint_least8_t
uint_least16_t
uint_least32_t
uint_least64_t
[7.18.1.3] 3 Требуются следующие типы:

int_fast8_t
int_fast16_t
int_fast32_t
int_fast64_t
uint_fast8_t
uint_fast16_t
uint_fast32_t
uint_fast64_t

Итак, как прочитано, все архитектуры, которые могут предлагать совместимый со стандартами компилятор C или C ++ — включая автономные, видя как stdint.h требуется в тех — должен быть способен обеспечить примитивные типы не менее 64 бит!

Учитывая стандартную свободу действий во многих других деталях реализации, мне это кажется странным. Это тем более, что, очевидно, мы применяем его с 1999 года, за несколько лет до того, как 64-битные вычисления стали массовыми даже на настольных ПК. Это не говоря о отставании от этого, во многих случаях до сих пор существующих встроенных архитектур.

Каково было основание для требования, чтобы все реализации имели примитивные типы не менее 64 бит? И, поскольку это, безусловно, имеет серьезные последствия для разработчиков на практике, как они отреагировали на это?

(… или то, что я пропустил в своем чтении, тоже всегда ответ)

-2

Решение

Вы правы, что все реализации C и C ++ должны предоставлять тип по крайней мере 64 бит — но это не просто uint_least64_t а также int_least64_t эта сила это. Минимальный диапазон для unsigned long long int а также long long int тоже требуется 64 бита.

Почему комитет по стандартам считает, что стоит использовать 64-битный тип? Трудно сказать, но, вероятно, потому что самый у архитектур есть такая возможность, и те, которые не могут реализовать ее через библиотечные функции (которые не будут связаны, если они не используются).

1

Другие решения

Других решений пока нет …