“x”和“u”printf / scanf转换说明符是否同样适用于相同类型?

3
假设我有:
printf("%llu %llx", one, two);

然后,onetwo都可以是unsigned long long类型,它们的区别仅在于分别以十进制或十六进制打印。
有一堆宽度说明符(h, hh, L, I等),似乎每个说明符都可以与ux转换说明符一起使用,但每次只能传递正确宽度的无符号类型值。
是否真的如此,无论以x还是以u结尾,并且具有相同的宽度说明符,我都可以传递相同类型的值,这总是合法的?

你看过文档了吗? - Kevin
3
@Kevin 是的,当然,我正在寻找一个陷阱。 - sharptooth
4
x/Xu(以及o)对于每个宽度说明符都具有相同的类型。这不就是你在问的吗? - Kevin
1
没有任何陷阱。(对于efg格式说明符也是如此:给定的数据可以以不同的方式呈现。) - rici
1
o, u, xX在给定的宽度说明符中都需要相同类型的参数。 - John Bode
1个回答

1
如果一个宽度说明符对其中一个有效,则对两个都有效,还可以用于o和X,并且生成的指令提供相同的数据类型--指定宽度的无符号整数。唯一的区别是输出格式的方式(或对于scanf,期望输入的格式)。有很多宽度说明符(h、hh、L、I等),看起来每个都可以与u和x转换说明符一起使用,但每次我只能传递正确宽度的无符号类型值。

确实有各种宽度说明符。大多数,但不是全部,适用于整数类型,包括对应于 xXou 的无符号类型以及对应于 di 的有符号类型。然而,标准并没有将 L 列为其中之一,并且根本没有指定 I。一些实现可能仍将其视为整数宽度说明符,并具有特定于实现的行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接