c/c++两种语言不同的连接性:extern “C“;extern “C++“

"本文详细介绍了C++中的extern"C"和extern"C++"声明,解释了C和C++由于链接性差异导致的函数调用问题。C语言的函数名会被编译器修改,而C++支持函数重载,函数名会加上参数类型信息。为了解决跨语言调用的问题,需要使用extern声明来指定函数的连接性,确保正确调用。"
摘要由CSDN通过智能技术生成

c/c++两种语言不同的连接性,extern “C”;extern “C++”:

c++中不可以直接使用c函数,c中也不可以直接使用c++;

知识前提:链接程序要求每个不同的函数都有不同的符号名。

c语言中,一个名称只对应一个函数,C语言编译器会将spiff这样的函数名翻译为_spiff,此为C语言连接性。

c++中,函数重载使得一个名称可以对应多个函数,对函数名的翻译会加上其参数种类,可能将spiff(int)转换为_spiff_i或者_spiff_int,将spiff(double,double)翻译为_spiff_d_d或则_spiff_double_double,此为c++语言连接。

不同的语言连接下,c中直接调用c++函数或者c++中直接使用c函数都是不合适且易报错的,因为连接性不同。

解决方法是在调用函数时在函数前面增加extern "C"或者extern "C++"以区分调用的函数的连接性,例如:

使用c语言连接性

extern "C" void spiff(int);//使用c语言连接性

默认使用c++连接性

extern void spiff(int);//默认使用c++连接性

显式使用c++连接性

extern "C++" void spiff(int);//显式使用c++连接性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值