C++ —— 函数重载,extern“C“,缺省参数

概念

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。
也就说在同一作用域下通过名称相同,参数不同实现函数的区分。

底层实现

c++名字修饰规则:

  1. 实际我们的项目通常是由多个头文件和多个源文件构成,而通过我们C语言阶段学习的编译链接,我们可以知道,【当前a.cpp中调用了b.cpp中定义的Add函数时】,编译后链接前,a.o的目标文件中没有Add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址在b.o中。因此进入链接阶段
  2. 链接器看到a.o调用Add,但是没有Add的地址,就会到b.o的符号表中找Add的地址,然后链接到一起。
  3. 链接时,面对Add函数,gcc的函数修饰后名字不变。而g++的函数修饰后变成【_Z+函数长度+函数名+类型首字母】。

测试

对于函数func 我们进行查看的汇编语句
在这里插入图片描述
光标所在位置为c语言下的函数名
在这里插入图片描述
我们查看c++环境下的函数情况
在这里插入图片描述
通过下面的汇编语句我们发现同样的函数在c++中函数名就发生了变化。
在这里插入图片描述

extern “C”

某些情况下我们希望我们的函数能按照c语言风格进行编译,我们就可以加上extern“C”
在这里插入图片描述
在这里插入图片描述

缺省参数

在c语言中,函数没有指定参数列表时,默认可以接受任意多个参数
但在c++中,因为严格的参数类型检测,没有参数列表的函数,默认为void,不接受任何参数
c++对于函数参数检测更加严格,如果函数没有参数则不能接受任何参数

缺省参数: 缺省参数是声明或定义函数时为函数的参数指定的一个默认值,在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参

  • 缺省参数一般从右往左进行缺省
  • 缺省参数不能同时在函数声明和定义中出现,只能二者则其一
  • 缺省值必须是常量或者全局变量
  • C语言不支持
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值