2

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

4

1 に答える 1