43 c c++ c++-standard-library c-standard-library
许多编译器提供128位整数类型,但我使用的那些都没有提供typedef int128_t.为什么?
据我记得,标准
int128_t为此目的储备intmax_t至少128位(并且,我不相信我已经使用了实际符合最后一点的实现)
Kei*_*son 23
我会参考C标准; 我认为C++标准继承了规则<stdint.h>/ <cstdint>从C.
我知道gcc 在某些平台上实现了128位有符号和无符号整数,以及名称__int128和unsigned __int128(__int128是实现定义的关键字).
即使对于提供标准128位类型的实现,该标准也不需要 int128_t或uint128_t未定义.引用C标准N1570草案的第7.20.1.1节:
这些类型是可选的.但是,如果实现提供宽度为8,16,32或64位的整数类型,没有填充位,并且(对于具有二进制补码表示的有符号类型),它应定义相应的typedef名称.
C允许实现定义的扩展整数类型,其名称是实现定义的关键字.gcc __int128与unsigned __int128标准定义的扩展整数类型非常相似 - 但是gcc不会这样对待它们.相反,它将它们视为语言扩展.
特别是,如果__int128和unsigned __int128是扩展的整数类型,那么gcc将需要定义intmax_t和uintmax_t作为那些类型(或者至少128位宽的某些类型).它没有这样做; 代替,intmax_t并且uintmax_t仅是64位.
在我看来,这是不幸的,但我不相信它会使gcc不合格.没有可移植程序可以依赖于__int12864位以上的任何整数类型的存在.