【发布时间】:2014-12-18 13:10:05
【问题描述】:
说我要打印unsigned char:
unsigned char x = 12;
这是正确的。这个:
printf("%d",x);
或者这个:
printf("%u",x);
?
事情在其他地方,所以我遇到了这样的讨论:
-即使将 ch 更改为 unsigned char,C 标准也没有定义代码的行为。这是因为 unsigned char 被提升为 int(在正常的 C 实现中),因此将 int 传递给 printf 的说明符 %u。但是,%u 需要一个 unsigned int,所以类型不匹配,并且 C 标准没有定义行为
-您的评论不正确。 C11 标准规定转换说明符必须与函数参数本身的类型相同,而不是提升类型。这一点在 hh 长度修饰符的描述中也有特别说明:“参数将根据整数提升进行提升,但其值应在打印前转换为有符号字符或无符号字符”
那么哪个是正确的?有可靠消息来源说这件事吗? (从这个意义上说,我们还应该使用 %d 打印 unsigned short int,因为它可以提升为 int?)。
【问题讨论】:
标签: c