64位的long int和long long int平台上,intmax_t应该是多少?

5
在C++标准18.4中,它指定了以下内容:
typedef 'signed integer type' intmax_t;

在64位平台上,根据标准,哪种“有符号整数类型”应该使用64位的long intlong long int

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

C++标准规定:

头文件定义了与C标准中7.18相同的所有函数、类型和宏。

而在C标准(N1548)的7.18中则写道:

The following type designates a signed integer type capable of representing any value of any signed integer type:

intmax_t

在这种情况下,似乎long intlong long int都可以符合要求?

这个结论正确吗?选择任意一个是否都符合标准?


只是好奇,N1548/7.18是否明确保证intmax_t是一个现有类型的typedef而不是新类型?(看起来它似乎总是这样,但无法确定是否像您的引用中所写的那样) - Stephen Lin
@StephenLin:你在想typedef __int128 intmax_t。我不确定。 - Andrew Tomazos
2个回答

4

是的,你的推理是正确的。大多数实际应用程序选择满足条件的最低等级类型。


1
你知道为什么选择满足条件的最低等级类型而不是最高等级类型的原理吗? - Eric Postpischil
@EricPostpischil:我猜测这种策略是为了尽可能选择long int,因为它比long long int更早出现,但这只是一种猜测。 - Andrew Tomazos

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接