在 C++中,extern "C"
是一个链接指示符,用于告诉 C++编译器以 C 语言的方式进行链接。
一、作用
- 混合编程:当 C++程序需要调用 C 语言编写的函数或库时,使用
extern "C"
可以确保 C++编译器正确地识别和链接这些 C 函数。因为 C 和 C++的函数命名规则和调用约定可能不同,extern "C"
可以解决这种不兼容性。 - 兼容性:对于一些遗留的 C 代码库,或者需要与其他使用 C 语言编写的软件进行交互时,
extern "C"
可以提供更好的兼容性。
二、使用示例
- 调用 C 函数:
假设存在一个 C 语言函数myCFunc
,定义如下:
// myCFunc.c
int myCFunc(int a, int b) {
return a + b;
}
在 C++程序中调用这个函数:
#ifdef __cplusplus
extern "C" {
#endif
int myCFunc(int a, int b);
#ifdef __cplusplus
}
#endif
int main() {
int result = myCFunc(3, 4);
std::cout << "Result: " << result << std::endl;
return 0;
}
- 链接 C 语言库:
如果有一个 C 语言库,例如mylib.h
和mylib.c
,可以在 C++程序中使用extern "C"
来链接这个库。
首先,编译 C 语言库:
gcc -c mylib.c -o mylib.o
ar rcs libmylib.a mylib.o
然后,在 C++程序中使用:
#ifdef __cplusplus
extern "C" {
#endif
#include "mylib.h"
#ifdef __cplusplus
}
#endif
int main() {
// 使用 C 语言库中的函数
int result = myFuncFromLibrary();
std::cout << "Result from library: " << result << std::endl;
return 0;
}
需要注意的是,extern "C"
只影响链接阶段,它并不会改变 C++代码的语法或语义。在使用extern "C"
时,要确保 C 函数的声明和定义与 C++程序中的调用方式一致。