C++中extern"C"作用
时间: 2023-09-28 17:10:28 浏览: 51
在C语言中,extern "C"是一个用于指定函数按照C语言的命名和调用约定进行编译和链接的修饰符。它的作用是告诉编译器和链接器,被extern "C"修饰的函数应该使用C语言的命名和调用约定,而不是C++的。这在使用C++编写代码,并且需要与C语言进行交互时非常有用。
在C++中,默认情况下会对函数的名称进行修饰,以便支持函数重载和其他特性。这导致C++函数的名称与C语言函数的名称不同,因此无法直接在C代码中调用C++函数。通过在C++代码中使用extern "C"修饰函数声明,可以使该函数按照C语言的约定进行编译和链接,从而可以在C代码中正确地引用和调用该函数。
总结来说,extern "C"的作用是控制函数的编译和链接方式,使其按照C语言的约定进行处理,以便在C和C++之间实现正确的函数调用和交互。
相关问题
C/C++中extern “C” 的作用
在C++中,extern "C"是用来指示编译器按照C语言的方式来编译函数的声明和定义的。在C++中,C和C++的函数调用方式不同,C++支持函数重载,而C不支持,因此在C++中调用C语言的函数时,需要使用extern "C"来告诉编译器按照C语言的方式来编译函数。
具体来说,当在C++中定义一个函数时,编译器会根据函数名和参数类型来生成一个符号名,这个符号名包含了函数名和参数类型的信息,这就是函数的名字修饰。而在C语言中,函数名没有被修饰,因此在C++中调用C语言的函数时,需要使用extern "C"来告诉编译器不要对函数名进行修饰,以便正确地调用函数。
例如,在C++中定义一个函数:
```
void foo(int x, int y);
```
编译器会生成一个名字修饰为"_Z3fooii"的符号名。而如果使用extern "C"来声明这个函数,编译器就会按照C语言的方式来编译函数,并生成一个名字为"foo"的符号名,以便正确地调用函数。
```
extern "C" void foo(int x, int y);
```
c++中extern
extern "C"的作用是用于C和C++混合编程时,告诉编译器某个函数是按照C的链接规则进行编译和链接的。在C++中,函数名会经过名称修饰(name mangling)以支持函数重载,而C语言没有函数重载的概念,因此如果想在C++中调用C语言编写的函数,需要用extern "C"来告诉编译器按照C的链接规则处理该函数。
下面是使用extern "C"的一个例子:
// C代码
#ifdef __cplusplus
extern "C" {
#endif
int add(int a, int b);
#ifdef __cplusplus
}
#endif
// C++代码
#include <iostream>
extern "C" {
#include "mylib.h"
}
int main() {
int result = add(3, 4);
std::cout << "Result: " << result << std::endl;
return 0;
}