【问题标题】:Can the intmax_t hold size_t?intmax_t 可以保持 size_t 吗?
【发布时间】:2018-05-21 14:38:43
【问题描述】:

intmax_t 可以容纳 size_t 最大十进制数吗? printf 中的哪种尺寸类型具有最大优先级 uintmax_t/intmax_t 或 size_t(例如,如果我写 printf("%zjd", x))?

【问题讨论】:

  • “优先级”是什么意思?
  • 优先级是指“处理优先级”尺寸类型规范
  • 我怀疑%zjd 会导致未定义的行为。
  • 你为什么要把"%zjd"写成printf?即使允许,也是矛盾的,没有意义。
  • "intmax_t 可以容纳 size_t 最大十进制数吗?" if INTMAX_MAX >= SIZE_MAX 女巫在很多实现中可能并非如此。

标签: c printf size-type


【解决方案1】:

很可能不会

两者都是特定于实现的,因此实际上无法回答。

size_t (通常)是一个无符号整数,它包含可容纳在给定 CPU 上的寄存器中的最大可能位数。虽然这在现实中并不能完全保证,但我仍然没有找到一个不正确的例子。

intmax_t 是一个有符号整数,这意味着它可能具有存储size_t 可以保存的任何值所需的位,但大值并不意味着相同; size_t 可以容纳的最大值,在解释为 intmax_t 时可能是负整数。

【讨论】:

    【解决方案2】:
    1. 不,因为size_t 是无符号的,可能会丢失一位。
    2. 我认为您不了解 printf() 的工作原理,您可以拥有“可选长度修饰符”,但不能超过一个。

    【讨论】:

    • 我知道,我正在尝试编写 printf 函数的副本,如果字符串的大小超过一个,我发现 stdio.h-printf 具有“大小优先级处理”-输入 mod。
    • 那么uintmax_t呢?
    猜你喜欢
    • 2016-07-15
    • 2012-09-11
    • 1970-01-01
    • 2011-01-21
    • 2021-09-25
    • 1970-01-01
    • 2014-03-24
    • 2014-01-15
    • 1970-01-01
    相关资源
    最近更新 更多