Compiler construction 什么';当编译器没有提供uint8时,它是uint8的一个很好的替代品?
我正在使用nvcc编译CUDA内核。不幸的是,nvcc似乎不支持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_
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解决了一个大问题,但事实并非如此,否则我不会问。这就是为什么我把所有的细节都放在最初的问题中,以明确它对我不起作用。