【问题标题】:Are there any platforms where fixed width types (intXX_t) are missing?是否有任何平台缺少固定宽度类型(intXX_t)?
【发布时间】:2018-07-30 09:15:15
【问题描述】:

C++11 有固定宽度,2 的补码类型:(u)int8_t(u)int16_t

但是,这些类型是可选的。

有时我需要使用这些类型,因此我的代码可能因此不太便携。

目前是否有任何平台(提供 C+11 编译器)不存在这些类型?

是否有任何“通用”(我知道这是一个模糊的词,但我想要一个答案,其中 DSP 和其他非常特定于领域的平台被排除在外,因为这些平台很少成为移植的目标软件)平台目前,这些类型不存在?

注 1:我知道,有些硬件不支持这些类型。但是,我所知道的所有此类硬件都没有符合 C++11 的编译器。这个问题是关于一个 C++11 实现,其中固定宽度类型实际上是缺失的。

注意 2:我知道,有强制性的 leastfast 类型,但这个问题是关于精确宽度类型的。

【问题讨论】:

  • @phuclv:是的,这也是我的问题。这是一个更普遍的问题。我提出了这个问题,因为我没有得到这个问题的具体答案,说明 C++ 一致性。我倾向于认为实际上没有通用平台,它没有固定宽度类型,所以使用它们绝对没问题。

标签: c++ c++11


【解决方案1】:

intXX_t 只能在CHAR_BIT 是2 的幂的二的补码 平台上实现。但即使在这些平台上,也不是所有intXX_t 都存在。例如,CHAR_BIT == 16 显然不能拥有int8_t 的 DSP。在CHAR_BIT == 24CHAR_BIT == 32 的DSP 上将没有int16_t

TI C2000 系列就是一个例子。它有C99 support,所以它有does have stdint.h。不幸的是,它尚不支持 C++11,但还有许多其他 TI DSP like C6000 do have C++14 support

另一个例子是SHARC DSPs where CHAR_BIT == 32 and have both C99 and C++11 support

这些类型也不存在补码和符号量级平台。

【讨论】:

  • 注意,目前一个补码和符号量级平台非常少见。甚至,有人提议声明一个有符号数是 2 的补码:open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0907r0.html
  • @geza 他们做或不做的事实与这些平台存在并且没有定义这些类型的事实完全无关。如果您考虑一下,没有编译器是完全符合 C++11 的。总会有错误。
  • 当然有针对特定 DSP 的独立 C++11 实现。除了错误和特定于编译器的扩展外,这些实现确实倾向于声明一致性。
  • 感谢您的研究!请注意,我已经稍微扩展了我的问题。对于那个很抱歉。我对通用平台感兴趣,通常人们将软件移植到。对于 DSP,我们通常不移植软件,而是专门为它们创建软件。
  • @rubenvb:但我不关心没有 C++11 编译器的平台。这就是为什么我特别强调我对确实存在 C++11 编译器的平台感兴趣。如果一开始就没有 C++11 编译器,int16_t 怎么会丢失?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多