4

C ++標準18.4では、次のように指定されています。

typedef 'signed integer type' intmax_t;

long int64ビットと64ビットのプラットフォームの標準long long intでは、この「符号付き整数型」はどちらである必要がありますか?

long intlong long int別個の基本タイプであることに注意してください。

C++標準は次のように述べています。

ヘッダーは、C標準の7.18と同じすべての関数、タイプ、およびマクロを定義します。

そして、C規格(N1548)の7.18では、次のように述べています。

次の型は、任意の符号付き整数型の任意の値を表すことができる符号付き整数型を示します。

intmax_t

この場合、両方long intlong long int資格があるように思われますか?

それは正しい結論ですか?それはどちらかが標準に準拠した選択でしょうか?

4

2 に答える 2

4

はい、あなたの推論は正しいです。ほとんどの実際の実装では、条件を満たす最低ランクのタイプが選択されます。

于 2013-03-07T18:37:22.443 に答える
3

さて、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
于 2013-03-07T18:42:01.530 に答える