Skip to main content
 首页 » 编程设计

c++之在 `h` 中使用标签 `hh` 或 `printf` 是否涉及未定义的行为

2024年02月20日13mfrbuaa

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

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

但是,当作为可变参数函数 printf 的参数传递时,ch 会提升为 int。因此,当使用 %hhx 时,会出现类型不匹配的情况。根据 C 标准,这里是否涉及任何未定义的行为?如果是C++怎么办?

有一些讨论here但没有给出答案。

请您参考如下方法:

C11 标准规定:

7.21.6.1/7 hh Specifies that a following d, i, o, u, x, or X conversion specifier applies to a signed char or unsigned char argument (the argument will have been promoted according to the integer promotions, but its value shall be converted to signed char or unsigned char before printing); or that a following n conversion specifier applies to a pointer to a signed char argument.

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