C语言中的重载问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 17:25:19
请看如下代码:

#include <stdio.h>

int sum(int a,int b)
{
return a+b;
}

float sum(float a,float b)
{
return a+b;
}

void main()
{
printf("%d \n",sum(1,2));

printf("%f \n",sum(1.3,2.4));
}

为什么会报一个这样的错误“‘sum' : ambiguous call to overloaded function”。
意思是说,调用sum()函数的重载不明确??是因为我在sum(1.3,2.4)中传参的问题吗?

sum(1,2)可以是调用sum(int,int)也可以是调用sum(float,float)
因为传递进去的1和2,可以被编译器转换成sum(1.0,2.0),编译器不确定你要调用哪个
同理sum(1.2,2.4)也可能被编译器转换成sum(1,2),也不能确定你要调用哪个

sum(1.3,2.4)改成sum((float)1.3,(float)2.4)就可以了,如果写成sum((float)1.3,2.4)或者sum(1.3,(float)2.4)也可以通过编译,但是可能会有警告
用显示的类型转换来清楚地告诉编译器要调用哪个

这是因为编译器还是不够聪明

printf("%f \n",sum(1.3,2.4));
改成
printf("%f \n",sum(1.3f,2.4f));

就行了

请问你是C还是C++,C语言可以重载函数吗?

C是面向过程的 没有重载