前言
很多小伙伴可能会在编程中遇到这样的问题,那就是在c++文件中调用c语言的函数会发生报错,那么为什么会出现这种情况,又该如何解决呢?
一、为什么会出现这种情况
以下在Linux下测试:
c函数: void MyFunc(){} ,被编译成函数: MyFunc c++
函数: void MyFunc(){},被编译成函数:_Z6Myfuncv
通过测试我们可以看到,c++支持函数重载,c++会根据自身习惯对函数名进行修饰,经过编译后c和c++产生的函数名是不同的,导致c++链接不到c语言中的函数。
2.怎样解决这种情况
extern "C"的主要作用就是为了实现c++代码能够调用其他c语言代码。加上extern "C"后,这部分代码编译器按c语言的方式进行编译和链接,而不是按c++的方式。
我们只要在c的.h文件下进行如下操作,再在c++文件中调用c的头文件,就可以链接成功。
c文件的.h文件代码如下
#ifdef __cplusplus //两个_下划线
extern "C" {
#endif // !__cplusplus
void show();
#ifdef __cplusplus //两个_下划线
}
#endif // !__cplusplus
c++文件代码如下
#include "test.h"
int main(){
show(); //在C++中 函数是可以发生重载的,编译器会把这个函数名称偷偷改变 _showv void
system("pause");
return EXIT_SUCCESS;
}
总结
例如:以上就是今天要讲的内容,本文仅仅简单介绍了如何在c++文件中调用c文件的函数,希望可以给大家带来帮助。