通过POSIX, intmax_t
指定一个有符号整数类型,能够表示任何有符号整数类型的任何值。
在C99 / C11中是否正确? intmax_t
总是和...一样大小 long long int
?
通过POSIX, intmax_t
指定一个有符号整数类型,能够表示任何有符号整数类型的任何值。
在C99 / C11中是否正确? intmax_t
总是和...一样大小 long long int
?
没有。 intmax_t
可以是大于的扩展整数类型 long long
。我不知道有任何系统将其定义为这样,但你不应该在应用程序代码中假设它们是相同的。 (假设它们在操作系统代码中是相同的,如果你的操作系统总能保证,但它仍然可能是一个坏主意。)
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如果整数常量不能由其列表中的任何类型表示,则它可能具有 扩展整数类型,如果扩展整数类型可以表示其值。
如果 long
和 long long
具有相同的宽度和表示,他们经常这样做, long
可以选择 intmax_t
。