在"printf"中使用标签"h"或"hh"是否涉及未定义的

Does using tag `h` or `hh` in `printf` involves undefined behaviour?

本文关键字:quot 是否 hh 未定义 标签 printf      更新时间:2023-10-16

例如,这样的代码可能很有用:

unsigned char ch = 0xf2;
printf("%02hhx", ch);

但是,当作为可变参数函数的参数传递时,ch被提升为intprintf。因此,当使用%hhx时,存在类型不匹配。根据 C 标准,这里是否涉及任何未定义的行为?如果是C++呢?

这里有一些讨论,但没有给出答案。

C11 标准说:

7.21.6.1/7hh指定以下diouxX转换说明符适用于有符号字符或无符号字符参数(该参数将具有 根据整数升级进行升级,但其值应为 打印前转换为有符号字符或无符号字符(;或者那个 以下 n 转换说明符适用于指向有符号字符的指针 论点。

所以不,没有未定义的行为。该标准很清楚,对可变参数函数的char参数将被提升为int