为什么C语言不支持重载而C++支持?

        想要了解该问题的原因,我们就要先了解一下C语言和C++编译链接的过程。
             

编译链接过程:

        总共有四步:预处理、编译、汇编、链接

        

        ①预处理:进行头文件展开、宏替换、去注释、条件编译等过程,将我们写的 .h文件、.cpp文件生成 .i文件

        ②编译:检查语法,生成汇编代码,生成 .s文件

        ③汇编把汇编代码转变为二进制机器码,生成 .o文件

        ④链接把汇编代码转变为二进制机器码,将生成的 .o文件链接在一起生成可执行文件


为什么C不支持重载,C++支持?

        这是因为C和C++的命名规则存在不同,C语言在编译时,对函数的命名是完全根据函数名来确定的,函数重载又是函数名都相同的函数,因此对C语言来说,它无法通过函数名来区分不同的重载函数。在汇编阶段生成的 .o文件中,存在符号表,符号表中就有各个函数的函数名,重载函数在符号表里就会产生同名冲突。其次在链接时,因为是直接使用函数名来进行标识和查找,因此也存在歧义和冲突。

        对于C++的命名规则就是对C语言的改进,C++在编译时对函数的命名不仅仅是根据函数名,同时也根据参数类型来命名,而重载的函数都是函数名相同但是参数的类型或者数量不同,因此C++就可以区分。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值