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