c++中extern “C“的作用及理解
1. 目的
extern "C"
是 C++ 特有的指令,用于支持 C++ 与 C 语言的混合编程。
2. 功能
extern "C"
指令的作用是指示 C++ 编译器使用 C 语言的编译规则来编译特定的代码块。这主要影响函数名的修饰(name mangling),但不会影响 C++ 的其他特性,如类和模板。
3. 原因
C 和 C++ 在编译期间生成函数符号的规则不同。C++ 支持函数重载,因此在编译时会将函数的参数类型信息加入到函数名中,形成独特的符号。例如,C++ 中的函数 Function(int, int)
可能会被编译成 _Z8Functionii
。
4. 示例
假设有一个 C 函数 Function
如下:
// MyFunction.c
void Function(int a, int b) {
printf("Hello!!! a = %d, b = %d\n", a, b);
}
在 C++ 中调用该函数:
// main.cpp
extern "C" void Function(int a, int b); // 告诉编译器使用 C 规则编译 Function
int main() {
Function(1, 2);
return 0;
}
如果不使用 extern "C"
,C++ 编译器会期望 Function
的符号为 _Z8Functionii
,而不是 C 编译器生成的 Function
,导致链接错误。
5. 解决方案
使用 extern "C"
可以确保 C++ 编译器在编译该函数时不进行名称修饰,从而使得 C++ 代码能够正确链接到 C 代码中定义的函数。