C函数调用中的默认参数提升
第6段
如果表示被调用函数的表达式具有以下类型 不包括原型
,则对每个参数和具有类型的参数执行整数提升。
float
升为
double
..这些叫做 默认参数提升.
如果参数不等于参数,则行为未定义。 如果函数是用以下类型定义的 包括一个原型
,或者原型以省略号结尾(
, ...
)或者升级后的参数类型与参数的类型不兼容,则行为是未定义的。 如果函数是用以下类型定义的 不包括原型
,而且升级后的参数类型与升级后的参数类型不兼容,除下列情况外,行为未定义:
一种提升类型是有符号整数类型,另一种提升类型是对应的无符号整数类型,该值在这两种类型中都是可表示的; 这两种类型都是指向字符类型或
void
.
第7段
如果表示被调用函数的表达式具有以下类型 包括一个原型
,参数被隐式转换,就像通过赋值一样,转换为相应参数的类型,将每个参数的类型作为其声明类型的非限定版本。 函数原型声明器中的省略符号将导致在上次声明参数之后停止参数类型转换。 默认的参数提升是对尾随参数执行的。
第8段
不隐式执行其他转换;特别是,参数的数量和类型不能与函数定义中的参数进行比较。 不包括函数原型声明器。.
默认参数提升
char
short
int
/unsigned int
float
double
printf
void func(int a, char b, float c); // Function prototypevoid func(int a, char b, float c) { /* ... */ } // Function definition
森栏
跃然一笑
绝地无双
相关分类