为什么没有 int128_t?
Why isn't there int128_t?
许多编译器提供 128 位整数类型,但我使用的 none 提供了类型定义 int128_t
。为什么?
据我所知,标准
- 为此目的保留
int128_t
- 鼓励提供此类类型的实现提供 typedef
- 要求此类实现提供至少 128 位的
intmax_t
(而且,我不相信我使用的实现实际上符合最后一点)
我会参考C标准;我认为 C++ 标准从 C.
继承了 <stdint.h>
/ <cstdint>
的规则
我知道 gcc 在某些平台上实现了 128 位有符号和无符号整数,名称为 __int128
和 unsigned __int128
(__int128
是实现定义的关键字)。
即使对于提供标准 128 位类型的实现,该标准也不要求 int128_t
或 uint128_t
被定义。引用 C 标准草案 N1570 第 7.20.1.1 节:
These types are optional. However, if an implementation provides
integer types with widths of 8, 16, 32, or 64 bits, no padding bits,
and (for the signed types) that have a two’s complement
representation, it shall define the corresponding typedef names.
C 允许实现定义的扩展整数类型,其名称是实现定义的关键字。 gcc 的 __int128
和 unsigned __int128
与标准定义的扩展整数类型非常相似——但 gcc 不那样对待它们。相反,它将它们视为语言扩展。
特别是,如果 __int128
和 unsigned __int128
是 扩展整数类型 ,则需要 gcc 定义 intmax_t
和 uintmax_t
作为那些类型(或作为至少 128 位宽的某些类型)。它没有这样做;相反,intmax_t
和 uintmax_t
只有 64 位。
在我看来,这是不幸的,但我不认为这会使 gcc 不符合规范。任何可移植程序都不能依赖于 __int128
的存在或任何大于 64 位的整数类型。更改 intmax_t
和 uintmax_t
会导致严重的 ABI 兼容性问题。
许多编译器提供 128 位整数类型,但我使用的 none 提供了类型定义 int128_t
。为什么?
据我所知,标准
- 为此目的保留
int128_t
- 鼓励提供此类类型的实现提供 typedef
- 要求此类实现提供至少 128 位的
intmax_t
(而且,我不相信我使用的实现实际上符合最后一点)
我会参考C标准;我认为 C++ 标准从 C.
继承了<stdint.h>
/ <cstdint>
的规则
我知道 gcc 在某些平台上实现了 128 位有符号和无符号整数,名称为 __int128
和 unsigned __int128
(__int128
是实现定义的关键字)。
即使对于提供标准 128 位类型的实现,该标准也不要求 int128_t
或 uint128_t
被定义。引用 C 标准草案 N1570 第 7.20.1.1 节:
These types are optional. However, if an implementation provides integer types with widths of 8, 16, 32, or 64 bits, no padding bits, and (for the signed types) that have a two’s complement representation, it shall define the corresponding typedef names.
C 允许实现定义的扩展整数类型,其名称是实现定义的关键字。 gcc 的 __int128
和 unsigned __int128
与标准定义的扩展整数类型非常相似——但 gcc 不那样对待它们。相反,它将它们视为语言扩展。
特别是,如果 __int128
和 unsigned __int128
是 扩展整数类型 ,则需要 gcc 定义 intmax_t
和 uintmax_t
作为那些类型(或作为至少 128 位宽的某些类型)。它没有这样做;相反,intmax_t
和 uintmax_t
只有 64 位。
在我看来,这是不幸的,但我不认为这会使 gcc 不符合规范。任何可移植程序都不能依赖于 __int128
的存在或任何大于 64 位的整数类型。更改 intmax_t
和 uintmax_t
会导致严重的 ABI 兼容性问题。