微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么uint8_t和uint16_t的格式说明符相同(%u)?

参见英文答案 > What default promotions of types are there in the variadic arguments list?1个
由于搜索printf()的结果很多,我只发现了相关的问题.

为什么uint8_t没有指定自己的格式字符串,但是其他类型呢?

据我所知,printf(),它必须知道提供的参数的长度,以便能够解析变量参数列表.

由于uint8_t和uint16_t使用相同的格式说明符%u,printf()如何“知道”要处理多少字节?或者在提供uint8_t时是否以某种方式对uint16_t进行了隐式转换?

也许我错过了一些明显的东西.

printf()是一个可变函数.它的可选参数(只有那些)根据认参数提升(6.5.2.2.p6)得到提升.

由于要求整数,因此在这种情况下应用整数提升,并且您提到的类型将被提升为int. (而不是unsigned int因为C)

如果在printf()中使用“%u”,并将其传递给uint16_t变量,则该函数将其转换为int,然后转换为unsigned int(因为您使用%u请求它)然后将其打印出来.

原文地址:https://www.jb51.cc/windows/364802.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐