C99 определяет int_fast16_t
как " целочисленные типы, как правило, самые быстрые, имеющие как минимум указанную ширину ", и Microsoft определяет его как 32-разрядное целое число в MSVC 2010:
typedef char int_fast8_t;
typedef int int_fast16_t;
typedef int int_fast32_t;
typedef unsigned char uint_fast8_t;
typedef unsigned int uint_fast16_t;
typedef unsigned int uint_fast32_t;
Тем не менее, Microsoft установила ограничения, чтобы не отражать фактический базовый тип данных:
#define INT_FAST8_MIN (-0x7f - _C2)
#define INT_FAST16_MIN (-0x7fff - _C2)
#define INT_FAST32_MIN (-0x7fffffff - _C2)
#define INT_FAST8_MAX 0x7f
#define INT_FAST16_MAX 0x7fff
#define INT_FAST32_MAX 0x7fffffff
#define UINT_FAST8_MAX 0xff
#define UINT_FAST16_MAX 0xffff
#define UINT_FAST32_MAX 0xffffffff
Можно предположить, что цель стандарта будет выглядеть следующим образом:
#define INT_FAST16_MIN (-0x7fffffff - _C2)
#define INT_FAST16_MAX 0x7fffffff
#define UINT_FAST16_MAX 0xffffffff
В противном случае это делает константы полностью избыточными?
edit Пример настройки NetBSD, как и ожидалось:
/* Maximum values of fastest minimum-width signed integer types. */
#define INT_FAST8_MAX INT32_MAX
#define INT_FAST16_MAX INT32_MAX
#define INT_FAST32_MAX INT32_MAX
#define INT_FAST64_MAX INT64_MAX
http://fxr.watson.org/fxr/source/arm/include/_stdint.h?im=3