是否有使用C ++编译器且没有64位整数的平台?

时间:2013-10-16 01:22:53

标签: c++ cross-platform

我打算写一个我想要跨平台的C ++库。我只是想知道我是否必须允许缺少任何64位整数类型的平台。

我知道有8位或16位嵌入式系统的C编译器具有32位整数但缺少64位整数(例如MSP430,至少在历史上是这样),但对于任何C ++编译器都是如此。系统

上下文:我实际上想要将我的simple pseudo-random number generator C库移植到C ++中。 C库主要处理32位整数,但有一些可选的64位API。此外,32位代码可以使用64位实现(非常简单)进行一些内部计算,或者使用仅32位实现(更复杂)。 C头具有#ifdef UINT64_C以启用/禁用64位API。 C文件具有#ifdef UINT64_C,用于在某些函数的64位或32位实现之间进行选择。那么,我是否必须对C ++库执行相同的操作,或者uint64_t始终可用是安全的假设吗?

1 个答案:

答案 0 :(得分:1)

在这个阶段,这是一个不完整的答案,但它是......

Boost C ++ Libraries

我想知道Boost C ++库对64位做了什么,因为它们的目标是成为一组高质量的多平台库。仔细查看代码,我偶然发现了

  • BOOST_HAS_LONG_LONG
  • BOOST_HAS_INT64_T
  • BOOST_HAS_MS_INT64

这表明Boost库试图允许缺少long long和/或uint64_t的平台,并且可能具有Microsoft特定的__int64类型。

我想更详细地研究一下。最好找到解释所有这些内容的Boost文档。

C ++ 11

C ++ 11定义long long as at least 64 bits。 C99已经这样做了。因此,任何针对C99和/或C ++ 11的编译器都应支持64位整数类型。有关背景信息,请参阅this other question