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