Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;定义64位无符号整数的跨平台方法_C++_Visual C++_Gcc - Fatal编程技术网

C++ c++;定义64位无符号整数的跨平台方法

C++ c++;定义64位无符号整数的跨平台方法,c++,visual-c++,gcc,C++,Visual C++,Gcc,现在我正在做一个项目,在代码的许多部分广泛使用64位无符号整数。到目前为止,我们只使用GCC4.6进行编译,但现在我们正在将一些代码移植到windows。这些无符号整数的宽度必须为64位,这一点至关重要。有人建议我们可以使用long-long,但如果long-long恰好大于64位,那就不好了,我们实际上想要保证它是64位,并且编写类似于static\u assert(sizeof(long-long)==8)的东西似乎有点代码味道 定义uint64这样的东西的最佳方法是什么,它可以跨gcc和m

现在我正在做一个项目,在代码的许多部分广泛使用64位无符号整数。到目前为止,我们只使用GCC4.6进行编译,但现在我们正在将一些代码移植到windows。这些无符号整数的宽度必须为64位,这一点至关重要。有人建议我们可以使用long-long,但如果long-long恰好大于64位,那就不好了,我们实际上想要保证它是64位,并且编写类似于
static\u assert(sizeof(long-long)==8)
的东西似乎有点代码味道


定义uint64这样的东西的最佳方法是什么,它可以跨gcc和msvc编译,而无需在任何地方使用不同的代码语法?

包括
cstdint
和使用
std::uint64\u t

您可以使用boost:

typedef int#u#t用#替换为宽度,表示有符号的 整数类型的精确#位;例如,int8_t表示8位 有符号整数类型。类似地,typedef uint#u t指定 位的无符号整数类型

见:

尤其是这个标题:

在Windows上,您可以使用
\uuuu int64
无符号的
,或typedefs:
UINT64
int64

但是是的,如果考虑到代码的可移植性,请按照其他人的建议使用标准的typedef。

我就是这么做的:

#ifndef u64
#ifdef WIN32
typedef unsigned __int64   u64;
#else // !WIN32
typedef unsigned long long u64;
#endif
#endif

一个ifdef和一个typedef一起会起作用吗?@davidfurle,这可能就足够了,问这个问题的目的是了解这里的最佳实践是什么。这只是在c++11中。在此之前,大多数编译器都有一个内在的方法来完成这项工作。@kukyakya,我现在正在gcc上做这项工作,但我不知道MSVC上是否有静态断言,因为我在这方面的开发经验很少。有趣的建议是,由于我们经常使用boost,如果
cstdint
不可用,这可能会实现这一点。