c ++跨平台方式定义64位无符号整数

时间:2012-02-14 14:04:57

标签: c++ visual-c++ gcc

现在我正在开发一个在代码的许多部分中广泛使用64位无符号整数的项目。到目前为止,我们只使用gcc 4.6编译,但我们现在将一些代码移植到Windows。这些无符号整数是64位宽是至关重要的。有人建议我们可以长时间使用但是如果长的长度恰好大于64位并不好,我们实际上希望保证它是64位并且写static_assert(sizeof(long long) == 8)之类的东西似乎是一点代码味道。

定义类似uint64的最佳方法是什么,它将在gcc和msvc之间进行编译,而无需在任何地方使用不同的代码语法?

4 个答案:

答案 0 :(得分:14)

包括cstdint和使用std::uint64_t

怎么样?

答案 1 :(得分:3)

你可以使用boost:

  

typedef int#_t,其中#替换为宽度,表示已签名   整数类型的#bits;例如,int8_t表示8位   有符号整数类型。同样,typedef uint#_t指定一个   完全#位的无符号整数类型。

请参阅:http://www.boost.org/doc/libs/1_48_0/libs/integer/doc/html/boost_integer/cstdint.html

特别是这个标题: http://www.boost.org/doc/libs/1_48_0/boost/cstdint.hpp

答案 2 :(得分:1)

这就是我的所作所为:

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

答案 3 :(得分:0)

在Windows上,您可以使用__int64unsigned __int64或typedef:UINT64INT64等。

查看this

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