【面试题】为什么c++支持函数重载,C语言不支持呢

本文介绍了C++的编译过程,包括预处理、编译、汇编和链接四个步骤,并通过对比解释了C++支持函数重载的原因,主要在于C++的名称修饰规则使得不同的函数在符号表中有独特的标识,而C语言则不支持这种机制。总结了函数重载的关键在于参数的不同和个数的不同,指出C++是C语言的优化,解决了C语言中的一些问题。
摘要由CSDN通过智能技术生成

目录

1.c++的执行编译过程

 2.面试题:为什么c++可以重载,c语言不可以


1.c++的执行编译过程

步骤:

  1. 预处理:展开头文件,替换宏,去除注释,条件编译
  2. 编译:检查语法错误,生成汇编代码
  3. 汇编:把汇编代码转化为二进制机械代码
  4. 链接:链接到一起生成可执行程序

如图所示 

 2.面试题:为什么c++可以重载,c语言不可以

思想:

  1. 当进行第三步汇编:把汇编代码转化为二进制机械代码,其中的符号表储存着函数名
  2. c++会因为函数名修饰规则,转化格式:_z+函数个数+函数名+函数参数(参考图易懂),分别为_z3addii_z3adddd两者右明显的不同,所以支持函数重载
  3. C语言的函数名存储是直接转化使用函数名;C语言的格式:就是函数名,int add(int x,int y)和double add(double x,double y)转化都是add,两者相同,所以不支持函数重载

如图所示:

 总结:

  1. 函数重载的量不同:1.参数不同  2.参数的个数不同
  2. c语言不支持就是因为直接转化函数名,c++支持是因为函数名修饰规则(c++可以说是C语言的优化,c++解决了C语言以前的一些问题)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值