В стандарте C99, 7.18.1.3 Самые быстрые целые числа минимальной ширины.
(7.18.1.3p1) "Каждый из следующих типов обозначает целочисленный тип, который обычно является самым быстрым225), чтобы работать со всеми целыми типами, которые имеют как минимум указанную ширину. "
225)« Назначенный тип не гарантируется как самый быстрый для всех целей, если в реализации нет четких оснований для выбора одного типа над другой, он просто выберет некоторый целочисленный тип, удовлетворяющий требованиям подписи и ширины. "
blockquote>и
(7.18.1.3p2)" Имя typedef int_fastN_t обозначает наивысший знак целого типа с шириной не менее N. Имя typedef uint_fastN_t обозначает самый быстрый целочисленный тип без знака с шириной не менее N. "
blockquote>Типы
int_fastN_t
иuint_fastN_t
являются аналогами целых чисел точной шириныintN_t
иuintN_t
. Реализация гарантирует, что они принимают не менееN
бит, но реализация может принимать больше бит, если она может выполнять оптимизацию с использованием более крупных типов; он просто гарантирует, что они берут как минимумN
бит.Например, на 32-битной машине
uint_fast16_t
можно определить какunsigned int
, а не какunsigned short
, потому что работа с типами размера машинного слова будет более эффективной.Еще одна причина их существования - точные целые числа полной длины являются необязательными в C, но требуются самые быстрые целые типы минимальной ширины и целые типы минимальной ширины (
int_leastN_t
иuint_leastN_t
).