现在我正在开发一个在代码的许多部分中广泛使用64位无符号整数的项目。到目前为止,我们只使用gcc 4.6编译,但我们现在将一些代码移植到Windows。这些无符号整数是64位宽是至关重要的。有人建议我们可以长时间使用但是如果长的长度恰好大于64位并不好,我们实际上希望保证它是64位并且写static_assert(sizeof(long long) == 8)
之类的东西似乎是一点代码味道。
定义类似uint64的最佳方法是什么,它将在gcc和msvc之间进行编译,而无需在任何地方使用不同的代码语法?
答案 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上,您可以使用__int64
,unsigned __int64
或typedef:UINT64
,INT64
等。
查看this
但是,如果关注代码可移植性,请按照其他人的建议使用标准typedef。