Как я понимаю, в спецификации C указано, что тип int
должен быть наиболее эффективным типом на целевой платформе, который содержит не менее 16 бит.
Разве это не то, что тоже означает определение C99 int_fast16_t
?
Может быть, они помещают его туда только для согласованности, так как нужны другие int_fastXX_t
?
Обновление
Подводя итог обсуждению ниже:
- Мой вопрос был неправильным во многих отношениях. В стандарте C не указывается битность для int. Он дает диапазон [-32767,32767], который должен содержать.
- Сначала я понимаю, что большинство людей скажут: "Но этот диапазон подразумевает не менее 16 бит!" Но C не требует двухкомпонентного (или даже двоичного) хранения целых чисел. Если бы они сказали "16-бит", могут быть некоторые платформы с 1-битным четностью, 1-битным знаком и 14-разрядной величиной, которые все еще будут "соответствовать стандарту", но не удовлетворяют этому диапазону.
- В стандарте ничего не сказано о int, являющемся наиболее эффективным типом. Помимо требований к размеру выше, int может быть определено разработчиком компилятора на основе любых критериев, которые они считают наиболее важными. (скорость, размер, обратная совместимость и т.д.)
- С другой стороны, int_fast16_t похож на предоставление подсказкам компилятору, что он должен использовать тот тип, который оптимален для производительности, возможно, за счет любого другого компромисса.
- Аналогично, int_least16_t сообщит компилятору использовать наименьший тип, который >= 16 бит, даже если он будет медленнее. Хорошо для сохранения пространства в больших массивах и т.д.
Пример: MSVC на x86-64 имеет 32-разрядный int, даже в 64-битных системах. MS решила сделать это, потому что слишком много людей предполагали, что int всегда будет ровно 32 бит, и поэтому многие ABI сломаются. Однако возможно, что int_fast32_t будет 64-битным числом, если 64-разрядные значения были бы быстрее на x86-64. (Которое я не думаю, что на самом деле это так, но он просто демонстрирует суть)