intmax_t 可以保持 size_t 吗?

Posted

技术标签:

【中文标题】intmax_t 可以保持 size_t 吗?【英文标题】:Can the intmax_t hold 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 女巫在很多实现中可能并非如此。 【参考方案1】:

很可能不会

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

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

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

【讨论】:

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

【讨论】:

我知道,我正在尝试编写 printf 函数的副本,如果字符串的大小超过一个,我发现 stdio.h-printf 具有“大小优先级处理”-输入 mod。 那么uintmax_t呢?

以上是关于intmax_t 可以保持 size_t 吗?的主要内容,如果未能解决你的问题,请参考以下文章

将 size_t 转换为向量<unsigned char>

关于 sizeof 溢出 size_t 的 C 标准

[c/c++] size_t是什么

size_t 介绍

size_t总结

参数可以保持不变吗?