C++中调用被C编译后为什么要加extern
时间: 2023-05-13 20:07:32 浏览: 69
在C语言中,如果一个变量或函数在当前文件中被定义,那么它的作用域仅限于当前文件。如果我们想在其他文件中使用这个变量或函数,就需要使用extern关键字来声明它。这样编译器就知道这个变量或函数是在其他文件中定义的,可以在链接时进行连接。因此,extern关键字的作用是告诉编译器这个变量或函数的定义在其他文件中,需要在链接时进行连接。
相关问题
c语言怎样编译成so文件,C++调用C语言编译的so文件
要将C语言编译成so文件,需要使用以下命令:
```
gcc -shared -fpic -o libexample.so example.c
```
其中,-shared参数指定生成动态链接库,-fpic参数指定使用位置独立代码,-o参数指定输出文件名,example.c是C语言源代码文件名。
C++可以通过以下步骤调用C语言编译的so文件:
1. 在C++源代码中包含C语言头文件,并声明C语言函数的原型。
2. 在编译C++源代码时,指定链接C语言编译的so文件。
3. 在C++代码中调用C语言函数即可。
例如,假设C语言编译的so文件名为libexample.so,其中有一个函数add(int a, int b)用于计算a和b的和,那么在C++中可以这样调用:
```cpp
#include <stdio.h>
extern "C" {
int add(int a, int b);
}
int main() {
int a = 1, b = 2;
int sum = add(a, b);
printf("%d + %d = %d\n", a, b, sum);
return 0;
}
```
在编译C++源代码时,需要指定链接libexample.so文件:
```
g++ -o example example.cpp -L. -lexample
```
其中,-o参数指定输出文件名,example.cpp是C++源代码文件名,-L参数指定链接库路径,"."表示当前目录,-lexample表示链接libexample.so文件。
c中的extern c++ extern
在C语言中,extern是一个关键字,用于在一个文件中声明一个全局变量或函数,表示该变量或函数在其他文件中定义或已经定义。
当使用extern关键字声明一个变量时,它将告诉编译器该变量在其他地方有定义,并且可以在当前文件中使用。这是为了避免重复定义相同的全局变量。
而extern "C"是用于C++语言的,它表示在C++编译环境中按照C语言的方式进行函数的链接和命名。当我们在C++代码中需要调用一个C语言写的函数时,需要使用extern "C"来告诉编译器按照C的方式进行处理。
总结起来,extern用于声明具有外部链接性的全局变量和函数,而extern "C"用于在C++中与C语言进行链接。