extern "C"
基础概念extern "C"
是C++中的一个连接指令,用于告诉C++编译器这部分代码应当使用C语言的方式进行编译和链接,而不是C++的方式。这在混合C和C++编程时特别有用,因为C++支持函数重载,而C不支持,所以C++编译器在编译时会进行名字修饰(Name Mangling),而C编译器则不会。
extern "C"
可以避免这个问题。extern "C"
可以用于函数声明、变量声明以及整个头文件。假设我们有一个C编写的库mylib.c
:
// mylib.c
#include <stdio.h>
void print_hello() {
printf("Hello from C!\n");
}
要在C++中使用这个库,我们可以在C++代码中这样声明:
// main.cpp
extern "C" {
#include "mylib.h" // 假设mylib.h是mylib.c的头文件
}
int main() {
print_hello(); // 调用C库中的函数
return 0;
}
同时,mylib.h
需要确保在C++编译器中也能正确处理:
// mylib.h
#ifdef __cplusplus
extern "C" {
#endif
void print_hello();
#ifdef __cplusplus
}
#endif
问题:链接时出现未定义的引用错误。
原因:可能是由于C++编译器对函数名进行了修饰,而链接器在链接C库时找不到对应的未修饰的符号。
解决方法:
extern "C"
。通过以上步骤,通常可以解决因extern "C"
使用不当导致的链接问题。
领取专属 10元无门槛券
手把手带您无忧上云