C++跨平台方式来定义64位无符号整数
现在我正在一个项目中广泛使用64位无符号整数在代码的很多部分。到目前为止,我们只用gcc 4.6进行编译,但现在我们正在将一些代码移植到windows。这些未签名的整数是64位宽是至关重要的。有人建议我们可以使用long long,但如果long long长度大于64bits,它并不好,我们实际上想要保证它会是64位,写一些像static_assert(sizeof(long long) == 8)
似乎有点代码闻。C++跨平台方式来定义64位无符号整数
什么是最好的方式来定义类似uint64的东西,可以跨gcc和msvc编译而不需要在任何地方都使用不同的代码语法?
可以使用升压:
的类型定义INT#_t,其中#代表宽度所取代,表示恰好#比特的带符号整数 类型;例如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
有趣的建议,因为我们使用boost很多,如果'cstdint'不可用,这可能会做这个技巧。 – shuttle87 2012-02-14 17:13:06
在Windows下你可以使用__int64
,unsigned __int64
,或类型定义:UINT64
,INT64
等
看this
但是,我f代码可移植性值得关注,请使用其他人所建议的标准typedefs。
这是我做的:
#ifndef u64
#ifdef WIN32
typedef unsigned __int64 u64;
#else // !WIN32
typedef unsigned long long u64;
#endif
#endif
为什么不直接使用'uint64_t'? – Fanael 2012-02-14 14:09:17
会ifdef和typedef在一起做的伎俩? – 2012-02-14 14:12:36
@DavidFeurle,这可能就足够了,提出这个问题的目的是为了感受最佳实践在这里。 – shuttle87 2012-02-14 14:16:24