- extern "C"的作用:
- 在C++中,函数名会进行“名字改编”(name mangling),以支持函数重载等特性。而C语言没有名字改编机制。
extern "C"
的作用是告诉C++编译器,声明的函数要按照C语言的方式进行编译和链接,即不进行名字改编。这样C++代码就能调用C语言编写的函数,或者与其他遵循C语言调用约定的代码进行交互。
- 适合使用extern "C"的场景:
- 调用C库函数:
- 许多底层库,如POSIX库函数(像
printf
、fopen
等)是用C语言编写的。在C++程序中调用这些函数时,需要使用extern "C"
声明。
- 示例代码:
#include <stdio.h>
extern "C" int printf(const char *format,...);
int main() {
printf("Hello, World!\n");
return 0;
}
- 实现C++与C语言的混合编程:
- 当一个项目一部分用C语言实现,另一部分用C++实现时,为了使两部分代码能互相调用函数,需要
extern "C"
。例如,假设我们有一个C语言编写的函数add
,在C++代码中调用它。
- C语言代码
add.c
:
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
- C++代码`main.cpp`:
extern "C" int add(int a, int b);
#include <iostream>
int main() {
int result = add(3, 5);
std::cout << "The result of addition is: " << result << std::endl;
return 0;
}