我已经理解了转换规则是如何用于表达的,但是我无法找到与函数参数相关的转换的位置或总结。有什么帮助吗?
答案 0 :(得分:2)
如果参数与函数原型中声明的参数匹配,则将其转换为该类型。
否则,没有函数原型或原型在...
结束且参数与省略号匹配,并且参数经历默认参数促销。
示例:
void f(char, int, ...);
signed char a = 'x';
f( 25.8 // converted (truncated) to char matching parameter
, a // converted (promoted) to int matching parameter
, a // default-promoted to int (not matching any parameter)
, 1.f) // default-promoted to double (not matching any parameter)
答案 1 :(得分:0)
基本上这已经过时,功能有原型。但是它存在于可变函数中,在这些函数中你没有适当的原型。实际上,这些似乎几乎只用于printf()样式格式字符串,并且大多数编译器都内置了特殊的案例代码来警告不匹配的类型。
但是短裤和字符被提升为int,并且浮动被提升为双倍。长整数保持很长(因此它们需要%ld格式),也有很长的长(%lld格式)。