2013-03-07 214 views
4

在C++標準18.4它指定:'intmax_t`應該在64位的`long int`和`long long int`平臺上做什麼?

typedef 'signed integer type' intmax_t; 

通過在平臺上的標準(或多個)具有一個64位long int和64位long long int應這種「符號整型」是?

請注意long intlong long int截然不同的基本類型。

C++標準表示:

頭定義所有的功能,類型和宏一樣在C標準7.18。

和C標準(N1548)它說的7.18:

下列類型指定能夠表示 任何符號整型的任何值的帶符號的整數類型:

intmax_t 

看來在這種情況下long intlong long int合格?

這是正確的結論嗎?那要麼是符合標準的選擇?

+0

只是好奇,並N1548/7.18明確保證'intmax_t'是現有的一個typedef鍵入而不是新的? (它似乎總是,但不能告訴它是否從你的報價中寫出) – 2013-03-07 18:35:19

+0

@StephenLin:你正在考慮'typdef __int128 intmax_t'。我不確定 – 2013-03-07 18:36:30

回答

4

是的,你的推理是正確的。大多數真實世界的實現選擇滿足條件的最低等級類型。

+1

你是否知道選擇滿足條件而不是最高級別類型的最低級別類型的理由? – 2013-03-07 21:56:21

+0

@EricPostpischil:我會推測,如果可能的話,政策是選擇'long int',因爲它早於'long long int',但這只是一個瘋狂的猜測。 – 2013-03-08 13:50:06

2

那麼,假設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