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

问题描述 投票:2回答:1

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

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

C99将int_fast16_t定义为“通常最快具有至少指定宽度的整数类型”,并且Microsoft在MSVC 2010中将其定义为32位整数:typedef char int_fast8_t; typedef ...

c visual-studio-2010 c99 stdint
1个回答
1
投票

这是一个错误。 MSVC是C ++编译器,Microsoft从未专注于支持更新的C标准。 VS 2010是the first MSVC version that has <stdint.h>,因此毫无疑问,会有很多问题。

© www.soinside.com 2019 - 2024. All rights reserved.