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 吗?的主要内容,如果未能解决你的问题,请参考以下文章