C编程笔录(一)1.3: 为什么C不支持函数重载,而C++支持?

问题: 为什么C不支持函数重载,而C++支持?

因为C和C++的函数在源文件生成可执行程序文件的“编译”阶段函数签名的方式不一样。

举个例子:

如在.c和.cpp文件里分别定义个一模一样的函数int minus(int a, int b){return a - b;},在执行“编译”阶段函数签名后.c文件的该函数名为minus,.cpp文件的该函数名为_Z3minusii,如果.c和.cpp文件再定义一个同名函数,如int minus(int a, double b){return a - b;},函数签名后.c文件的该函数名为:minus,.cpp文件的该函数名为_Z3minusid,这样.c文件编译时就会报error: conflicting types for‘minus’ int minus(int a, double b) & note: previous definition of ‘minus’ was here. 问题,因为两个函数签名都是minus,所以报“类型冲突,这里之前定义过”,而.cpp文件正常,因为_Z3minusii函数签名和_Z3minusid不一样。

C++的函数签名方式是将函数的参数类型和函数名通过一定的关联规则生成,从这里也可以看出为什么C++说的函数重载为函数名相同,参数类型或者个数不同,返回类型任意即构成重载条件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值