【发布时间】:2015-05-01 04:20:46
【问题描述】:
以下是libc 对可变参数函数的看法:
由于原型没有为可选参数指定类型,在调用可变参数函数时,默认参数提升是在可选参数值上执行的。这意味着 char 或 short int 类型的对象(无论是否有符号)被提升为 int 或 unsigned int,视情况而定;并且 float 类型的对象被提升为 double 类型。因此,如果调用者将 char 作为可选参数传递,则将其提升为 int
那么,为什么会有人在 printf 中使用 "%c" 或 "%hd" 呢?他们应该只使用"%d"。
我还看到float 没有格式说明符。 float 必须与 %f 一起使用,double 由于促销活动,不可能接收浮点数作为可变参数。
我知道scanf,参数是指针,不会发生任何提升。
我有什么理由错过"%c" 必须存在于printfs 的原因和时间?
【问题讨论】:
-
什么是“libc”?
-
请编辑您的评论以删除归属。我在问原因,周围有很多 C 库的实现。你指的是哪一个?您应该正确引用您的来源。
-
%hd代表short,我想你的意思是%hhd。 -
@JensGustedt 是的,当然。我看错了
标签: c printf variadic-functions