C++调用C函数需用extern "C"避免名称修饰,确保C函数用C编译器编译,并在C++中正确声明和链接目标文件或库。
在实际开发中,C++调用C语言函数是一种常见的混合编程需求。由于C++支持函数重载、名称修饰(name mangling)等特性,而C语言没有,直接调用可能导致链接错误。解决这个问题的关键是告诉C++编译器:某些函数是按照C语言方式编译的,应使用C的链接规则。
在C++代码中调用C函数,最核心的方法是用 extern "C" 包裹C函数的声明,防止C++进行名称修饰。
#ifdef __cplusplus
extern "C" {
#endif
void c_function(int x);
int add(int a, int b);
#ifdef __cplusplus
}
#endif
extern "C" {
#include "c_header.h"
}
C语言源文件必须用C编译器(如gcc)编译成目标文件。C++只能调用已按C约定生成的目标代码。
int add(int a, int b) {
return a + b;
}
编写C++主程序,声明C函数并链接C目标文件。
extern "C" {
int add(int a, int b);
}
#include iostream>
using namespace std;
int main() {
cout
return 0;
}
若C函数被打包成库,调用方式类似,仍需 extern "C" 声明。
基本上就这些。只要记住:C++调用C函数,关键是用 extern "C" 告诉编译器关闭C++的名称修饰,其余编译链接流程正常进行。不复杂但容易忽略细节。