2013-03-07 208 views
4

在C++标准18.4它指定:'intmax_t`应该在64位的`long int`和`long long int`平台上做什么?

typedef 'signed integer type' intmax_t; 

通过在平台上的标准(或多个)具有一个64位long int和64位long long int应这种“符号整型”是?

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

C++标准表示:

头定义所有的功能,类型和宏一样在C标准7.18。

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

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

intmax_t 

看来在这种情况下long intlong long int合格?

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

+0

只是好奇,并N1548/7.18明确保证'intmax_t'是现有的一个typedef键入而不是新的? (它似乎总是,但不能告诉它是否从你的报价中写出) – 2013-03-07 18:35:19

+0

@StephenLin:你正在考虑'typdef __int128 intmax_t'。我不确定 – 2013-03-07 18:36:30

回答

4

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

+1

你是否知道选择满足条件而不是最高级别类型的最低级别类型的理由? – 2013-03-07 21:56:21

+0

@EricPostpischil:我会推测,如果可能的话,政策是选择'long int',因为它早于'long long int',但这只是一个疯狂的猜测。 – 2013-03-08 13:50:06

2

那么,假设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