INT_FAST16_MAX不反映MSVC 2010中的类型大小?

时间:2011-07-19 01:21:21

标签: windows visual-studio-2010

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

http://fxr.watson.org/fxr/source/arm/include/_stdint.h?im=3

0 个答案:

没有答案