首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当编译器没有提供uint8_t时,它有什么好的替代方案?

当编译器没有提供uint8_t时,它有什么好的替代方案?
EN

Stack Overflow用户
提问于 2010-11-15 21:59:26
回答 4查看 10.3K关注 0票数 4

我正在使用nvcc编译一个CUDA内核。不幸的是,nvcc似乎不支持uint8_t,尽管它确实支持int8_t (!)。出于可移植性、可读性和理智的原因,我宁愿不使用unsigned char。还有别的好办法吗?

为了避免任何可能的误解,这里有一些细节。

代码语言:javascript
运行
复制
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2010 NVIDIA Corporation
Built on Mon_Jun__7_18:56:31_PDT_2010
Cuda compilation tools, release 3.1, V0.2.1221

含码

代码语言:javascript
运行
复制
int8_t test = 0;

很好,但是代码包含

代码语言:javascript
运行
复制
uint8_t test = 0;

抛出一个错误消息,如

代码语言:javascript
运行
复制
test.cu(8): error: identifier "uint8_t" is undefined
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-15 22:07:32

C99整数类型不是“编译器定义的”-它们是在<stdint.h>中定义的。

尝试:

代码语言:javascript
运行
复制
#include <stdint.h>
票数 22
EN

Stack Overflow用户

发布于 2010-11-15 22:07:30

代码语言:javascript
运行
复制
typedef unsigned char uint8_t;
票数 1
EN

Stack Overflow用户

发布于 2010-11-15 22:08:42

这与Mac使用的没有什么不同:

代码语言:javascript
运行
复制
typedef unsigned char uint8_t;

您对unsigned char的可移植性有什么担心?如果关注的是一个char可能不代表8位存储,那么您可以按照以下方式包含一个静态断言:

代码语言:javascript
运行
复制
typedef int Assert8BitChar[(CHAR_BIT == 8)? 0 : -1];

这将在违反假设时导致编译错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4189243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档