我打算写一个我想要跨平台的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
始终可用是安全的假设吗?
答案 0 :(得分:1)
在这个阶段,这是一个不完整的答案,但它是......
我想知道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定义long long
as at least 64 bits。 C99已经这样做了。因此,任何针对C99和/或C ++ 11的编译器都应支持64位整数类型。有关背景信息,请参阅this other question。