C99 定义int_fast16_t
为“通常最快且至少具有指定宽度的整数类型”,Microsoft 在 MSVC 2010 中将其定义为 32 位整数:
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;
然而,微软已经设置了不反映实际基础数据类型的限制:
#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
否则这会使常量完全多余?
编辑:如预期的 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