C语言超载

时间:2014-07-29 05:36:13

标签: c xcode overloading

#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,过载是否会失效?

4 个答案:

答案 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