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;
但是,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
否则这将使常数完全冗余吗?
编辑:
预期的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
C99将int_fast16_t定义为“通常最快具有至少指定宽度的整数类型”,并且Microsoft在MSVC 2010中将其定义为32位整数:typedef char int_fast8_t; typedef ...
这是一个错误。 MSVC是C ++编译器,Microsoft从未专注于支持更新的C标准。 VS 2010是the first MSVC version that has <stdint.h>
,因此毫无疑问,会有很多问题。