【问题标题】:Example of an extended integer type?扩展整数类型的示例?
【发布时间】:2019-08-02 19:08:33
【问题描述】:

从 C99 开始,C 支持实现定义的扩展整数类型 (6.2.5 p7)。是否有任何实现实际上实现了扩展整数类型?

我知道 gcc 的 __int128,它目前被视为一种语言扩展,并且在 gcc 的实现定义行为文档 (J.3.5) 中没有正式列为扩展整数类型。我在 clang 或 MSVC 的文档中找不到任何内容。 Solaris 声明没有扩展整数类型。

What are “extended integer types”? 有一些相关的讨论,但唯一提到的其他候选者是旧版本的 MSVC 中的__int64,并且由于 MSVC 的版本,cmets 似乎同意它不是正式的扩展整数类型是C90。

【问题讨论】:

  • 或许int24_t?
  • 很好奇。 GCC 手册确实说 __int128 仅在具有足够宽整数模式的平台上可用。事实上,它在不是标准整数类型之一的别名的任何地方都可用(大概是long long int)?
  • @chux 请回答。
  • @JohnBollinger gcc (Ubuntu 8.3.0-6ubuntu1) 具有 64 位 longlong longintmax_t,并在 Ubuntu 19.04 VM 中提供 __int128
  • GCC 中的 __int128 不是 C 标准意义上的“扩展整数类型”。让我查一下 GCC 开发人员的引言……但对于其中之一,它比 x86-64 上的 intmax_t 更宽,这是普通扩展整数类型所不能做到的。

标签: c


【解决方案1】:

扩展整数类型的例子?
是否有任何实现实际上实现了扩展整数类型?

各种处理器都有 24 位宽度的指令和常量内存。

支持此类 Microchip 处理器的编译器提供 (u)int24_t.

添加到 C99 的 int24_t 类型 int24_t 和 uint24_t 类型(以及现有的 __int24 和 __uint24 类型)现在在使用 C99 库和 CCI 不活动时可用。


尽管某些编译器确实提供 128 位整数类型,但如果该类型是扩展整数类型,C 库将要求 (u)intmax_t 至少为该宽度。 C11dr 7.20.1.5

C 还需要“在 intmax_t/uintmax_t 中完成的预处理算术”。

我怀疑提供 intN (N > 64) 的编译器将其作为语言扩展

我知道没有编译器存在(u)int128_t(作为扩展整数类型)。

【讨论】:

    猜你喜欢
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2012-12-24
    • 2016-02-29
    • 2012-10-22
    相关资源
    最近更新 更多