与C printf函数中的%hhu格式说明符不一致?

ar7v8xwq  于 2023-06-28  发布在  其他
关注(0)|答案(1)|浏览(151)

据我所知,%hhu格式说明符应该有一个无符号字符的范围。然而,在我测试它的一些编译器中,它似乎有一个无符号短的范围。有什么原因吗?
我尝试使用%hhu打印,例如,65535。我希望打印255,假设值将被转换为无符号字符。然而在CodeBlocks和Tiny C Compiler中,我得到的是65535。如果我尝试打印65536,它会打印0,正如我所期望的那样,如果我使用%hu(带一个h)。
然而,在OnlineGDB中,我得到了我所期望的行为。

fivyi3re

fivyi3re1#

使用*printf()"%hh"
...指定以下B、d、i、o、u、x或X转换说明符应用于signed charunsigned char参数(参数将根据整数提升进行提升,但其值应在打印前转换为signed charunsigned char);... C23dr § 7.23.6.1 7
当打印unsigned char范围之外的值时,怀疑错误是合理的。
[编辑]
另一方面,"hh"被指定与signed charunsigned char参数一起使用。由于OP没有这样做,结果是 undefined behavior(UB)。
如果任何参数不是相应转换规范的正确类型,则行为未定义。§ 7.23.6.1 9

相关问题