intmax_t与long long int相同吗?

问题描述 投票:12回答:3

通过POSIX,intmax_t指定一个有符号整数类型,能够表示任何有符号整数类型的任何值。

在C99 / C11中,intmax_t总是和long long int一样大小,这是正确的吗?

c posix
3个回答
10
投票

不.intmax_t可以是大于long long的扩展整数类型。我不知道有任何系统将其定义为这样,但你不应该在应用程序代码中假设它们是相同的。 (假设它们在操作系统代码中是相同的,如果你的操作系统总能保证,但它仍然可能是一个坏主意。)


4
投票

C99 N1256 standard draft

6.2.5类型告诉我们“扩展的有符号整数类型”:

4有五种标准的有符号整数类型,指定为signed char,short int,int,long int和long long int。 (这些和其他类型可以用几种其他方式指定,如6.7.2中所述。)也可能存在实现定义的扩展有符号整数类型标准和扩展有符号整数类型统称为有符号整数类型。 29)

29)因此,本标准中有关有符号整数类型的任何语句也适用于扩展有符号整数类型。

7.18.1.5最大宽度整数类型表示intmax_t是最大可能的“有符号整数类型”,因此包括扩展类型:

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

intmax_t

6.4.4.1然后,整数常量非常清楚扩展整数类型可能比任何标准类型都大:

6如果整数常量不能由其列表中的任何类型表示,则它可能具有扩展整数类型,如果扩展整数类型可以表示其值。


1
投票

如果longlong long具有相同的宽度和表示,他们经常这样做,long可以选择intmax_t

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