#include <stdio.h>
int Add(int a, int b);
int Add(int a, int b, int c);
double Add(double a, double b);
void main()
{
printf("1+2=%d\n",Add(1,2));
printf("3+4+5=%d\n",Add(3,4,5));
printf("1.414+2.54=%f\n",Add(1.414,2.54));
}
int Add(int a, int b)
{
return a+b;
}
int Add(int a, int b, int c)
{
return a+b+c;
}
double Add(double a, double b)
{
return a+b;
}
我用C语言编写并使用Xcode。在研究“重载”时,Xcode会显示错误消息,指出无法执行过载。相反,它显示“添加'的冲突类型”消息。 使用Xcode,过载是否会失效?
答案 0 :(得分:5)
简单来说,C不允许函数重载!因此,您无法使用相同的名称编写多个函数!
尝试提供不同的功能名称并尝试 -
#include <stdio.h>
int Add2int(int a, int b);
int Add3int(int a, int b, int c);
double Add(double a, double b);
void main()
{
printf("1+2=%d\n",Add2int(1,2));
printf("3+4+5=%d\n",Add3int(3,4,5));
printf("1.414+2.54=%f\n",Add(1.414,2.54));
}
int Add2int(int a, int b)
{
return a+b;
}
int Add3int(int a, int b, int c)
{
return a+b+c;
}
double Add(double a, double b)
{
return a+b;
}
答案 1 :(得分:2)
如上所述,C不支持函数重载(如在C ++中)。 Neverthless C99引入了具有空参数的类似函数的宏,但是必须使用确切的数字保留逗号。这是一个例子:
#include <stdio.h>
#define Add(a,b,c) (a+0)+(b+0)+(c+0)
int main(void)
{
int a = 1, b = 2, c = 3;
double x = 1.5, y = 2.25, z = 3.15;
printf("%d\n", Add(a, b, c)); /* 6 */
printf("%d\n", Add(a, b, )); /* 3 */
printf("%d\n", Add(, , c)); /* 3 */
printf("%g\n", Add(, y, z)); /* 5.4 */
printf("%g\n", Add(x, , )); /* 1.5 */
return 0;
}
请注意,由于对于具有浮点类型0
的参数的通常的算术转换,将适当地提升为此类型。
答案 2 :(得分:1)
这可能只有在您使用C ++时才有可能
但在C语言中,您无法想到函数重载。
因此,尝试更改功能名称,然后它将起作用。
答案 3 :(得分:0)
实际上 C 语言不允许函数或方法重载 要进行方法重载,您必须转到 C ++ 或 Java