@你真的了解extern “C”的作用吗?extern在C语言和C++中到底扮演着怎样的角色?

关于函数重载

首先必须强调关于函数重载的概念。
函数重载是C++中的一种概念,是一种静态多态的表现。
函数发生重载的条件:
(1)作用域相同;
(2)函数名字相同;
(3)函数参数类型不同/个数不同/顺序不同;
注意:函数的返回值不可以作为重载的条件。

关于extern “C”

C++中,可以有函数的重载,所以为了避免冲突,两个发生重载了的函数在进行编译之后的函数名字是不同的,比如以下两个函数:

void func(int a, int b);
void func(int a, float b);

func()函数发生了函数重载,那么编译之后的函数名字可能为: _func_int_int之类的 和_func_int_float之类的。
可以发现,这样的名字包含了函数名、函数参数数量以及类型信息,C++就是靠这种机制来实现函数重载的。

但是在C语言中,是没有函数重载的概念的,上面两个函数在C语言中进行编译之后生成的姓名可能是:_func之类的,当然在C语言中这两个函数不允许同时存在。

所有当C++代码中使用了C语言写的代码的时候,就会产生函数名字不同而产生的一系列错误。

这个时候,使用extern “C”声明之后,再次进行编译的时候就不会对其名字进行特殊的处理,采用C语言的方式,因此extern “C”是C++编译器提供的C++编译器与C连接的符号,用来解决函数名字匹配的问题。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值