Compiler construction 什么';当编译器没有提供uint8时,它是uint8的一个很好的替代品?

Compiler construction 什么';当编译器没有提供uint8时,它是uint8的一个很好的替代品?,compiler-construction,types,cuda,Compiler Construction,Types,Cuda,我正在使用nvcc编译CUDA内核。不幸的是,nvcc似乎不支持uint8\u t,尽管它确实支持int8\u t(!)。出于可移植性、可读性和合理性的考虑,我最好不要使用无符号字符。还有其他好的选择吗 为了避免任何可能的误解,这里有一些细节 $ nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2010 NVIDIA Corporation Built on Mon_Jun__7_18:56:31_

我正在使用nvcc编译CUDA内核。不幸的是,nvcc似乎不支持
uint8\u t
,尽管它确实支持
int8\u t
(!)。出于可移植性、可读性和合理性的考虑,我最好不要使用
无符号字符。还有其他好的选择吗


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

$ 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
代码包含

int8_t test = 0;
uint8_t test = 0;
可以,但代码包含

int8_t test = 0;
uint8_t test = 0;
抛出错误消息,如

test.cu(8): error: identifier "uint8_t" is undefined
C99整数类型不是“由编译器定义的”-它们是在
中定义的

尝试:

#包括

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

typedef unsigned char uint8_t;
您对
无符号字符的可移植性有何顾虑?如果问题是
char
可能不代表8位的存储,那么您可以包括一个静态断言,内容如下:

typedef int Assert8BitChar[(CHAR_BIT == 8)? 0 : -1];

这将导致在违背假设的情况下编译出错。

使用
nvcc时,这似乎可以编译:

#include <stdint.h>

int main() {
    uint8_t x = 0;
    return (int) x;
}
#包括
int main(){
uint8_t x=0;
返回(int)x;
}

谢谢。
int8\t
int8\t的可用性使我感到震惊:非常感谢。在我的机器上为meNot解决了一个大问题,但事实并非如此,否则我不会问。这就是为什么我把所有的细节都放在最初的问题中,以明确它对我不起作用。