Все мы знаем, что целочисленные определения типа точной ширины, определенные в 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 бит? И, поскольку это, безусловно, имеет серьезные последствия для разработчиков на практике, как они отреагировали на это?
(… или то, что я пропустил в своем чтении, тоже всегда ответ)
Вы правы, что все реализации C и C ++ должны предоставлять тип по крайней мере 64 бит — но это не просто uint_least64_t
а также int_least64_t
эта сила это. Минимальный диапазон для unsigned long long int
а также long long int
тоже требуется 64 бита.
Почему комитет по стандартам считает, что стоит использовать 64-битный тип? Трудно сказать, но, вероятно, потому что самый у архитектур есть такая возможность, и те, которые не могут реализовать ее через библиотечные функции (которые не будут связаны, если они не используются).
Других решений пока нет …