1

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

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

上下文:我实际上想将我的一个简单的伪随机数生成器C 库移植到 C++。C 库主要处理 32 位整数,但有一些可选的 64 位 API。此外,32 位代码可以使用 64 位实现(非常简单)进行一些内部计算,或者使用仅 32 位实现(更复杂)。C 头文件必须#ifdef UINT64_C启用/禁用 64 位 API。C 文件必须#ifdef UINT64_C在某些功能的 64 位或仅 32 位实现之间进行选择。那么,我是否必须为 C++ 库做同样的事情,或者这是一个uint64_t始终可用的安全假设?

4

1 回答 1

1

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

提升 C++ 库

我想知道 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为至少 64 位。C99已经这样做了。因此,任何针对 C99 和/或 C++11 的编译器都应该支持 64 位整数类型。有关一些背景信息,请参阅其他问题

于 2013-10-17T06:36:38.427 回答