extern C的用法

经常c c++混合编程的时候,需要用到extern "C"的关键字,这里说明一下其原理:
由于c++为了支持面向对象编程,命名空间和函数的重载,定义了更加复杂的符号命名规则,因为c++的函数一般都是属于某个类,或者某个命名空间,为了唯一的标识函数,链接器在为函数入口点建立符号的时候,必须用某种方法来包含函数的从属信息。c++的重载机制允许同一个类的不同函数拥有相同的函数名和返回值,只是参数不同,所以为了唯一的标识函数,链接器在为函数的入口点建立符号的时候,必须用某种方法来包含函数的参数信息。所以为了满足这些要求,编译器设计了名称修饰技术,名称修饰技术是将函数名,函数的从属信息,函数的参数列表进行组合,生成函数符号的过程,具体来说,就是函数的从属信息作为函数名的前缀,参数列表作为函数名的后缀。
所以编译c++的时候有些c函数不需要修饰,但链接器还是会默认进行修饰的,为了告诉链接器不要进行修饰,就出现了extern “c” 关键字。

#ifdef __cplusplus
extern "C"
{
#endif
int my_function(int x, int y);
#ifdef __cplusplus
}
#endif

其实通俗一点说,就是告诉编译器用extern "C"包起来的code要按照c语言的方法去寻找编译和链接。

参考:
https://blog.csdn.net/jiqiren007/article/details/5933599

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值