什么是C中参数的函数转换规则?

时间:2017-03-16 00:15:05

标签: c

我已经理解了转换规则是如何用于表达的,但是我无法找到与函数参数相关的转换的位置或总结。有什么帮助吗?

2 个答案:

答案 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格式)。