当前位置:  开发笔记 > 编程语言 > 正文

uint128_t没有命名类型

如何解决《uint128_t没有命名类型》经验,为你挑选了2个好方法。

我正在将一些代码从C转移到C++.在转换期间我遇到了:

uint128_t 没有命名类型

我的编译器:gcc版本5.2.1
我的操作系统:Ubuntu 15.1

这个编译好的C和我认为它将通过包括解决,stdint.h但它没有.到目前为止,我没有尝试过其他任何事情,因为似乎没有关于此错误的大量信息(示例).uint128_t在整个程序中使用并且对于构建是必不可少的,因此我无法删除它,并且我不确定使用不同的整数类型.

以下是使用位置和方式的示例.

union {
    uint16_t  u16;
    uint32_t  u32;
    uint128_t u128;
} value;

是否可以定义uint128_t或者我应该查看我的编译器?



1> Andrea Corbe..:

GCC有类型内置支持__int128,unsigned __int128,__int128_t__uint128_t(最后两个无证).使用它们来定义您自己的类型:

typedef __int128 int128_t;
typedef unsigned __int128 uint128_t;

或者,您可以使用__mode__(TI):

typedef int int128_t __attribute__((mode(TI)));
typedef unsigned int uint128_t __attribute__((mode(TI)));

引用文档:

TImode

"Tetra Integer"(?)模式表示十六字节整数.

十六字节= 16*CHAR_BIT> = 128.



2> Sourav Ghosh..:

我认为这可以通过包含来解决,stdint.h但尚未解决。

好吧,可能不会。

首先检查C ++标头,cstdint来自C ++ 14,第§18.4.1章,

namespace std {.....

typedef unsigned integer type uint8_t; // optional
typedef unsigned integer type uint16_t; // optional
typedef unsigned integer type uint32_t; // optional
typedef unsigned integer type uint64_t; // optional
.....

和,

标头定义与C标准中的7.18相同的所有函数,类型和宏。[..]

然后引用C11标准第§7.20.1.1章(重点是我的

    typedef名称uintN_t指定具有宽度N且没有填充位的无符号整数类型。因此,uint24_t表示具有正好宽度的这种无符号整数类型24

    这些类型是可选的。但是,如果实现提供的整数类型的宽度为8、16、32或64位,没有填充位,并且(对于带符号的类型)具有二进制补码表示,则它应定义相应的typedef名称。

因此,在这里我们注意到两件事。

    没有强制要求为固定宽度提供支持的实现int

    64如我们所见,Standard将宽度限制为。宽度大于标准再次规定的宽度。您需要检查所用环境的文档。

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有