函数调用转换与参数类型的一致性 执行函数调用时所发生的下述实参和形参的类型转换称为函 数调用转换: 1)如无函数说明(或函数说明为传统C的形式),则对实 参进行可能的整数提升,以及oa转换成 double,称为参数提 升 maino i short a=10, b-20 long sumo /*函数说明的传统C形式,也可省略* printi(sm-%d,sum(ab);/对a、b提升为int,实参和形参 类型不匹配,结果不正确。* long sum(long x,long y) return x+y:
函数调用转换与参数类型的一致性 执行函数调用时所发生的下述实参和形参的类型转换称为函 数调用转换: (1)如无函数说明(或函数说明为传统C的形式),则对实 参进行可能的整数提升,以及float转换成double,称为参数提 升。 main() { short a=10,b=20; long sum(); /*函数说明的传统C形式,也可省略*/ printf(“sum=%ld”,sum(a,b)); /*对a、b提升为int,实参和形参 } long sum(long x,long y) { return x+y; } 类型不匹配,结果不正确。*/
(2)如函数说明为标准C的形式,则将实参自动转变成形式 参数的类型(类似于赋值) maint i short a=10, b=20 long sum(long, long) 函数说明的原型说明* printf(sun-%d”,sum(ab);/*对a、b自动转换成long* ong sum(long X,long i return x+y;
(2)如函数说明为标准C的形式,则将实参自动转变成形式 参数的类型(类似于赋值) main() { short a=10,b=20; long sum(long,long); /*函数说明的原型说明*/ printf(“sum=%ld”,sum(a,b)); /*对a、b自动转换成long*/ } long sum(long x,long y) { return x+y; }
(3)如果函数定义为传统C,需要则对形参进行可能的整数提 升,而标准C不需要。 short sum( x,y) *标准C的定义形式* short X, *经过整数提升后,形参为int,int* short i return x+y 实参和形参的一致性 实参与形参应在数目上、次序上和以及转换后类型上一致 否则,调用效果不确定
(3) 如果函数定义为传统C,需要则对形参进行可能的整数提 升,而标准C不需要。 short sum( x,y) /*标准C的定义形式*/ short x; /*经过整数提升后,形参为int,int */ short y; { return x+y; } 实参和形参的一致性 实参与形参应在数目上、次序上和以及转换后类型上一致。 否则,调用效果不确定