C++支持函数重载的原理--名字修饰

一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接。

预处理:头文件展开,宏替换,条件编译,去掉注释等等。

        预处理其中最重要的是头文件展开,以Func.h,Func.cpp,Test.cpp为例,头文件展开会生成两个文件,Test.i,Func.i。其中Test.i包含函数的声明和实际调用,Func.i包含函数的声明和定义。

编译:检查语法,生成汇编代码--Func.s,Test.s.其中只有声明,还没有找到确切的地址

汇编(不是汇编代码,是一个步骤):转换成二进制的机器码,生产Func.o,Test.o.

链接:合并到一起,链接一些没有确定函数地址等等,生成a.out.

                        如果一个函数只有声明没有定义,就会导致链接错误.

以上没有理解也不重要,重要的是:

链接的时候需要找到函数的地址,c语言链接函数地址直接寻找的是函数名,而c++(Linux下)的函数名修饰规则改为_Z函数名字符个数 函数名 参数首字母.也就意味着函数的类型不同,函数修饰出来的名字就不同.

 

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值