`intmax_t`应该在64位`long int`和`long long int`的平台上?

时间:2013-03-07 18:32:11

标签: c++ c c++11

在C ++标准18.4中,它指定:

typedef 'signed integer type' intmax_t;

在具有64位long int和64位long long int的平台上的标准应该是“有符号整数类型”吗?

请注意,long intlong long int不同的基本类型。

C ++标准说:

  

标题定义所有函数,类型和宏,与C标准中的7.18相同。

和C标准的7.18(N1548)中说:

  

以下类型指定能够表示任何值的有符号整数类型   任何有符号整数类型:

intmax_t

在这种情况下,long intlong long int似乎都符合条件?

这是正确的结论吗?那要么是符合标准的选择?

2 个答案:

答案 0 :(得分:4)

是的,你的推理是正确的。大多数现实世界的实现选择满足条件的最低秩类型。

答案 1 :(得分:3)

好吧,假设GNU C库是正确的(来自/usr/include/stdint.h):

/* Largest integral types.  */
#if __WORDSIZE == 64
typedef long int                intmax_t;
typedef unsigned long int       uintmax_t;
#else
__extension__
typedef long long int           intmax_t;
__extension__
typedef unsigned long long int  uintmax_t;
#end