intmax_t与long long int相同吗?

时间:2013-12-08 21:44:25

标签: c posix

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

在C99 / C11中,intmax_t的大小始终与long long int的大小相同是否正确?

3 个答案:

答案 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)

如果longlong long具有相同的宽度和代表性(他们经常这样做),则可以为long选择intmax_t