【发布时间】:2020-04-01 07:00:39
【问题描述】:
例如这样的代码可能有用:
unsigned char ch = 0xf2;
printf("%02hhx", ch);
但是,ch 在作为可变参数函数printf 的参数传递时被提升为int。所以当使用%hhx 时,会出现类型不匹配。根据 C 标准,这里是否涉及任何未定义的行为?如果是 C++ 呢?
有一些讨论here但没有给出答案。
【问题讨论】:
-
没有类型不匹配。
printf()中的hhx代码将int转换为unsigned char并从那里继续。 -
你在说什么“类型不匹配”?
printf完全了解默认参数提升。而%hhx需要一个int参数。%hhx仅影响输出规范,但它接收的参数仍然是int。 -
ch在UCHAR_MAX>INT_MAX时可以提升为unsigned int。这意味着sizeof(int)==1,因此它并没有真正被提升,因为在这样的系统上unsigned char将与unsigned int相同。
标签: c++ c printf language-lawyer