首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C语言过载

C语言过载
EN

Stack Overflow用户
提问于 2014-07-29 05:36:12
回答 4查看 380关注 0票数 0
代码语言:javascript
运行
复制
#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,重载会不能工作吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-07-29 05:53:12

简单地说,C不允许函数重载!因此,您不能用相同的名称编写多个函数!

试着给出不同的函数名然后试着-

代码语言:javascript
运行
复制
#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;
}
票数 5
EN

Stack Overflow用户

发布于 2014-07-29 07:09:12

如前所述,C不支持函数重载(如在C++中)。永无止境的C99引入了带有空参数的类似函数的宏,但是逗号必须保留确切的数字。下面是一个示例:

代码语言:javascript
运行
复制
#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
EN

Stack Overflow用户

发布于 2015-05-17 14:01:44

这可能只有在您使用C++时才有可能。

但是在C语言中,您不能考虑函数重载。

因此,尝试更改函数名,然后它就能工作了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25008833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档