默认参数提升和printf中“%c”的相关性

Arj*_*ran 1 c printf variadic-functions

libc关于变参函数,这是要说的:

由于原型没有为可选参数指定类型,因此在对可变参数函数的调用中,默认参数提升是对可选参数值执行的。这意味着将char或short int类型的对象(无论是否带符号)提升为int或unsigned int;并且将float类型的对象提升为double类型。因此,如果调用方将char作为可选参数传递,它将被提升为int

那么,为什么会有人使用"%c",或"%hd"在printf的?他们应该只使用"%d"

我还看到没有的格式说明符floatfloat必须与之%f共存,double因为由于晋升,不可能接受浮夸作为可变参数。

我知道scanf,参数是指针,并且没有提升。

我是否有任何理由想念为什么以及何时"%c"必须存在printfs?

das*_*ght 5

那么,为什么有人会在printf中使用“%c”或“%hd”呢?他们应该只使用“%d”。

人们通常会用%c整数来解释其字符代码(即用print 'A'代替65)。有人会%hd指示printf删除short可能已添加的符号的上半部分,以扩展传入的短值。这两种格式都提供了对的另一种解释int

我还看到没有的格式说明符float

没错:由于该值已提升为double,因此不需要单独的标志。