C++ extern “C“ 用法

博客介绍了extern “C”的作用。因C++支持函数重载,C和C++对同一函数编译后生成的函数名不同,若C++调用C语言编写模块的函数会出现链接错误。extern “C”可让编译器按C语言方式编译和链接代码,实现C++调用C语言代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

extern “C”

由于c++中需要支持函数重载,所以c和c++中对同一个函数经过编译后生成的函数名不相同

extern “C”主要作用就是为了实现c++代码能够调用其他 c 语言代码

1(不常用)
//告诉编译器 show() 函数按c语言的方式进行编译和链接
extern "C" void show();
2(常用)
// C头文件中使用
#if __cplusplus
	extern "C"{
#endif
//放 C头文件声明
//void func1();
//...

#if __cplusplus
	}
#endif

其他

在Linux下测试:
c函数:	 	void MyFunc(){} ,被编译成函数: MyFunc
c++函数: 	void MyFunc(){},被编译成函数: _Z6Myfuncv

由于c++中需要支持函数重载,所以 c 和 c++ 中对同一个函数经过编译后生成的函数名是不相同的。

这就导致了一个问题,如果在 c++ 中调用一个使用 c 语言编写模块中的某个函数,
那么 c++ 是根据 c++ 的名称修饰方式来查找并链接这个函数,那么就会发生链接错误。

以上例,c++ 中调用 MyFunc 函数,在链接阶段会去找 _Z6Myfuncv,结果是没有找到的,
因为这个 MyFunc 函数是c语言编写的,生成的符号是 MyFunc。

所以

extern "C"的主要作用就是为了实现 c++ 代码能够调用其他 c 语言代码。

加上extern "C"后,这部分代码编译器按c语言的方式进行编译和链接,而不是按c++的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值