c加加中使用extern“C”作用有那些,请详细说明
时间: 2024-05-24 19:13:59 浏览: 16
好的,我明白了。关于extern "C"在C++中的作用,主要有以下几个方面:
1. 解决C++和C语言的链接问题
由于C++支持函数重载,函数名会经过C++的名字重整,与C语言的函数名不同,所以在C++中调用C语言编写的函数时存在链接错误。而使用extern "C"可以将函数名修改为C语言的命名规则,解决链接问题。
2. 解决C++函数名重载问题
在C++中,如果两个函数名相同但参数不同,那么它们被编译器处理后的名字也是不同的。但是在某些情况下,我们可能需要使用相同的函数名,比如在链接时需要将不同目标文件中的同名函数进行合并。这时,就可以使用extern "C"将函数名统一为C语言的命名规则,避免函数名重载问题。
3. 定义C语言接口
某些操作系统或编程语言的API可能是使用C语言编写的。在C++中,如果我们需要使用这些API,我们需要使用extern "C"将这些函数的声明和定义修改为C语言的命名规则,并且将它们放在extern "C"块中,以确保正确的符号导出。这样,我们就可以在C++中使用C语言接口了。
希望可以解决您的疑惑。
相关问题
extern“C”作用有那些,请详细说明
extern "C" 是一个标记,用于告诉编译器编译函数时要按照 C 语言的规则进行编译,而不是 C++ 语言的规则。主要用于处理 C++ 和 C programming language 命名混编的问题。
具体来说,extern "C" 可以有以下作用:
1. 解决函数名称带有符号信息的问题:C++ 函数内部会在函数名前面添加类型信息,例如 int function() 会被编译为 _function_i,但是 C 语言不会在函数名前面添加类型信息,为了解决这个问题,我们可以使用 extern "C" 来告诉编译器按照 C 语言的规则进行编译。
2. 解决函数在 C++ 中的命名问题:C++ 允许函数的名称相同,但是参数不同,例如 int function(int a),float function(float b),但是在 C 语言中同名的函数不允许存在,为了解决这个问题,我们可以使用 extern "C" 来告诉编译器不要按照 C++ 的规则进行命名,而是按照 C 的规则进行命名。
3. 解决 C++ 库在 C 中的调用问题:C++ 编译后会有一些 C++ 特有的代码,这些代码在 C 编译器中无法识别。为了解决这个问题,我们可以使用 extern "C" 来告诉编译器按照 C 语言的规则进行编译,使得 C 语言编译器可以正确识别这样的库。
总之,extern "C" 可以用来解决 C++ 和 C 语言的混编问题,确保 C++ 代码可以被 C 语言编译器正确编译。
c语言中extern使用
在C语言中,extern关键字用于声明一个变量或函数是在其他文件或模块中定义的。它的作用是告诉编译器该变量或函数在其他文件中定义,编译器在编译时不会对其进行处理,而是在链接时将其与其他文件中的定义进行链接。
下面是两个使用extern关键字的例子:
1. 声明外部函数
假设我们有两个文件,一个是main.c,另一个是func.c,func.c中定义了一个函数show(),我们需要在main.c中调用该函数,就需要使用extern关键字进行声明。
```c
// func.c代码
#include <stdio.h>
void show() {
printf("hello world");
}
// main.c代码
#include <stdio.h>
extern void show(); // 声明外部函数show()
int main() {
show(); // 调用外部函数show()
return 0;
}
```
2. 声明外部变量
假设我们有两个文件,一个是main.c,另一个是var.c,var.c中定义了一个全局变量g_val,我们需要在main.c中使用该变量,就需要使用extern关键字进行声明。
```c
// var.c代码
int g_val = 10;
// main.c代码
#include <stdio.h>
extern int g_val; // 声明外部变量g_val
int main() {
printf("%d", g_val); // 输出外部变量g_val的值
return 0;
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)