【发布时间】:2016-04-07 22:02:03
【问题描述】:
我正在将一些代码从 C 移植到 C++。在我遇到的转换过程中:
uint128_t没有命名类型
我的编译器:gcc 版本 5.2.1
我的操作系统:Ubuntu 15.1
这编译为 C,我认为它可以通过包含 stdint.h 来解决,但它没有。到目前为止,我还没有尝试任何其他方法,因为似乎没有很多关于此错误的信息 (example)。 uint128_t 在整个程序中使用并且对于构建至关重要,因此我无法删除它,并且我不确定是否使用不同的整数类型。
以下是使用地点和方式的示例。
union {
uint16_t u16;
uint32_t u32;
uint128_t u128;
} value;
是否可以定义uint128_t 或者我应该查看我的编译器?
【问题讨论】:
-
太宽泛了。 128 位类型是非标准的。甚至
uint32_t也不受 C 标准的保证。 -
我认为standard suggests fixed-width integer types 仅支持 64 位,而不是更多。您应该找到一个为更广泛的类型提供软件支持的编译器,或者找到一个 bignum 库或自己编写。
-
@legends2k:固定宽度类型是可选的。只有某些(即
n*8; n=1..8)least和fast类型是强制性的。 -
我相信 g++ 不会定义
uint128_t,因为这需要对std::uintmax_t进行 ABI 重大更改。 -
gcc.gnu.org/onlinedocs/gcc/_005f_005fint128.html
typdef __int128 uint128_t,编译器应该知道你的目标是否支持它。