

新闻资讯
技术学院C++调用C函数需用extern "C"声明以禁用名称修饰,确保C链接;头文件应加#ifdef __cplusplus保护;C实现须在.c文件中,参数避免C++特有类型。
在C++中调用C语言函数,关键在于告诉C++编译器:这些函数的符号名不经过C++的名称修饰(name mangling),而是按C语言的方式链接。否则链接阶段会找不到对应符号。
这是最常用、最标准的方法。在C++代码中,用 extern "C" 包裹C函数的声明(头文件包含或函数原型)。
extern "C" {
#include "math_c.h" // 包含C头文件
}extern "C" {
int add(int a, int b); // 声明C函数
void print_msg(const char* s);
}注意:extern "C" 只影响声明,不影响定义;C函数的实现仍需放在C源文件(.c)中,或确保用C编译器编译。
为了让一个头文件既能在C中使用,又能在C++中安全包含,通常在C头文件里加宏判断:
// math_c.h #ifndef MATH_C_H #define MATH_C_Hifdef __cplusplus
extern "C" {
endif
int add(int a, int b); void print_msg(const char* s);
ifdef __cplusplus
}
endif
endif
这样C++代码直接 #include "math_c.h" 即可,无需额外加 extern "C"。
C++调用C函数,本质是混合链接,需注意以下几点:
-x c)容易出错的地方:
std::string 传给C函数 → C不认识该类型,应转为 c_str() 后传 const char*
#ifdef __cplusplus 保护 → C编译时报错(因为C不认识 extern
"C")不复杂但容易忽略。