许多编译器提供128位整数类型,但我使用的编译器中没有一个提供typedefsint128\u t。为什么?
据我回忆,标准
- 为此保留
int128\t - 鼓励提供此类类型的实现提供typedef
- 要求此类实现提供至少128位的
intmax\t
(而且,我不认为我使用的实现实际上符合最后一点)
我将参考C标准;我认为C++标准继承了 & lt的规则;标准力h>/<;cstdint>来自C
我知道gcc在某些平台上实现了128位有符号和无符号整数,名称分别为\uuuuuInt128和无符号整数128(\uuuuuInt128是实现定义的关键字)
即使对于提供标准128位类型的实现,该标准也不要求定义int128\t或uint128\t。引用C标准N1570草案第7.20.1.1节:
这些类型是可选的。但是,如果实现提供
宽度为8、16、32或64位的整数类型,无填充位,
和(对于有符号类型)具有2的补码
表示时,应定义相应的typedef名称
C允许实现定义的扩展整数类型,其名称为实现定义的关键字。gcc的\uuuu int128和无符号的<uuuu int128与标准定义的扩展整数类型非常相似,但gcc并不这样对待它们。相反,它将它们视为语言扩展
如果将em和128位代码定义为无符号代码类型,则至少需要将它们扩展为无符号代码类型。它没有这样做;相反,intmax\u t和uintmax\u t仅为64位
在我看来,这是不幸的,但我不认为这会导致gcc不合规。任何可移植程序都不能依赖于\uu int128的存在,也不能依赖于任何大于64位的整数类型。更改intmax\u t和uintmax\u t将导致严重的ABI兼容性问题