c++ - 在 `printf` 中使用标签 `h` 或 `hh` 是否涉及未定义的行为?
问题描述
例如,这样的代码可能很有用:
unsigned char ch = 0xf2;
printf("%02hhx", ch);
但是,在作为可变参数函数的参数传递时ch
被提升为。所以在使用的时候,会出现类型不匹配。根据 C 标准,这里是否涉及任何未定义的行为?如果是 C++ 怎么办?int
printf
%hhx
这里有一些讨论,但没有给出答案。
解决方案
C11标准说:
7.21.6.1/7
hh
指定后面的d
,i
,o
,u
,x
, 或X
转换说明符应用于有符号字符或无符号字符参数(该参数将根据整数提升进行提升,但其值应转换为有符号字符或无符号打印前的字符);或者后面的 n 转换说明符适用于指向有符号字符参数的指针。
所以不,没有未定义的行为。该标准很清楚,char
可变参数函数的参数将被提升为int
.
推荐阅读
- python - 如何使用熊猫将多个数据透视表插入工作簿的一个工作表
- python - 关于在python中导入python模块/包的问题
- flask - 无法使用 SocketIO 发射到 Flask 中的特定房间
- python - 函数不会让我在函数之外显示错误消息?
- javascript - d3.js 图表对象错误:“Uncaught SyntaxError: Unexpected identifier”
- jestjs - 在 GitLab CI 上使用 Playwright 时出现 WebSocket 错误
- python - 为什么用 Python 解释器比 PyPy 更快地计算小斐波那契数列
- python - 二叉搜索树的递归后继函数(Python)
- c++ - 如何创建一个类以使向量工作 std::vector
> v{ 1,2,3 }; - c - 如何在下面的程序中修改程序以将数组范围设置为 0 到 100