extern "C"中使用了一个C++的全局变量,那编译器会怎么处置这个全局变量
时间: 2024-05-06 16:15:46 浏览: 11
在使用 `extern "C"` 声明 C++ 函数时,编译器会将函数名称进行名称修饰(name mangling),以便在链接时能够正确识别函数。但是,全局变量不会被名称修饰,因此可以直接在 C++ 代码中定义全局变量,并在 C 代码中使用。
具体来说,如果在 C++ 代码中定义了一个全局变量,例如:
```
int my_global_var = 42;
```
那么在 C 代码中,可以通过 `extern` 关键字来声明该变量:
```
extern int my_global_var;
```
这样做可以让 C 代码访问到 C++ 中定义的全局变量,但需要注意的是,C++ 和 C 在对全局变量的初始化和链接时有一些不同,因此在实际使用中需要仔细考虑。
相关问题
c++全局变量在多文件项目里怎么使用
在多文件项目中,如果需要在多个文件中使用同一个全局变量,可以通过在一个头文件中声明该全局变量,并在需要使用该变量的文件中包含该头文件来实现。
具体步骤如下:
1. 在一个头文件中声明全局变量,如:
```c++
// global.h
#ifndef GLOBAL_H
#define GLOBAL_H
extern int g_var;
#endif
```
注意:使用`extern`关键字声明变量为外部变量,告诉编译器该变量在其他文件中定义。
2. 在需要使用该全局变量的文件中包含该头文件,如:
```c++
// A.cpp
#include "global.h"
void funcA() {
g_var = 1;
}
```
```c++
// B.cpp
#include "global.h"
void funcB() {
int x = g_var;
}
```
3. 在另一个文件中定义该全局变量,如:
```c++
// global.cpp
#include "global.h"
int g_var = 0;
```
注意:该文件中定义的全局变量不需要加`extern`关键字。
这样,就可以在多个文件中使用同一个全局变量了。
c调用c++类全局变量
为了在C中调用C++类的全局变量,需要使用extern "C"来声明这个变量。这样可以防止C++编译器对变量名进行修饰,从而使C编译器可以正确地找到这个变量。下面是一个示例代码:
test.h文件:
```cpp
#ifdef __cplusplus
extern "C" {
#endif
extern int g_num;
#ifdef __cplusplus
}
#endif
```
test.cpp文件:
```cpp
#include "test.h"
int g_num = 0;
```
test.c文件:
```c
#include "test.h"
#include <stdio.h>
int main() {
printf("%d\n", g_num);
return 0;
}
```
在这个示例中,test.h文件中使用extern "C"来声明了g_num变量,test.cpp文件中定义了g_num变量,test.c文件中调用了g_num变量并输出了它的值。
相关推荐
![](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)