extern变量可以被修改吗
时间: 2023-08-07 18:08:18 浏览: 228
可以,extern变量可以被修改。在C/C++中,extern关键字只是用于声明一个变量或函数,在声明的同时告诉编译器这个变量或函数的定义存在于其他文件中。因此,extern变量本身并没有什么特殊的限制,它的修改和使用方式与其他变量一样。
具体来说,当我们在一个文件中使用extern关键字声明一个变量时,这个变量的数据类型、作用域和存储方式等与其他普通变量一样。我们可以通过变量名直接访问这个变量,并对它进行修改。
例如,假设我们有两个文件a.c和b.c,它们都需要使用同一个全局变量x。我们可以在一个文件中定义这个变量(例如a.c),并在另一个文件中声明它(例如b.c):
```
//a.c
int x = 10; //定义全局变量x
//b.c
extern int x; //声明外部变量x
x = 20; //修改外部变量x的值
```
在b.c文件中,我们可以通过extern关键字声明外部变量x,并直接对它进行修改。这个修改操作会影响到所有使用这个变量的文件,因为它们都共享同一个变量。但是需要注意的是,extern变量的作用域和生命周期与它的定义相关,如果定义的变量是局部变量,那么在函数退出后,变量的生命周期也就结束了,其他文件无法再访问这个变量。
相关问题
extern 变量值改变
如果你想在一个文件中声明一个变量,然后在另一个文件中改变它的值,你可以使用`extern`关键字来实现。
在一个文件中,你可以使用`extern`关键字来声明变量,表示该变量是在其他文件中定义的。例如,你可以在一个文件中声明一个全局变量如下:
```c
extern int myVariable;
```
然后,在另一个文件中定义并初始化这个变量:
```c
int myVariable = 42;
```
这样,在第一个文件中就可以使用`myVariable`变量了,并且它的值会被修改为42。
需要注意的是,`extern`关键字只是用来声明变量,而不是定义变量。变量的定义应该在某个文件中进行,而在其他文件中使用`extern`来声明它。这样做可以避免多个文件中出现同名的全局变量,从而防止冲突和重复定义的错误。
请你说说 extern 的作用,extern变量在哪个数据段,为什么要 extern C
extern是C++中的关键字,用于声明一个变量或函数的外部链接性。它的作用有两个方面:
1. 声明外部变量:使用extern关键字可以声明一个在其他源文件中定义的全局变量,使得当前源文件可以引用该变量而不需要重新定义。这样可以在不同的源文件中共享同一个全局变量。
2. 声明外部函数:使用extern关键字可以声明一个在其他源文件中定义的函数,使得当前源文件可以引用该函数而不需要重新定义。这样可以实现函数的模块化和代码的复用。
extern变量通常存储在静态存储区(也称为数据段)中。静态存储区包括全局变量、静态变量和常量等。这些变量在程序运行期间一直存在,不会随着函数的调用结束而销毁。
关于为什么要使用extern C,主要是为了解决C++编译器对函数名进行修饰(Name Mangling)的问题。C++编译器会根据函数的参数类型和个数等信息对函数名进行修改,以实现函数的重载。而C语言不支持函数重载,因此其函数名不会被修饰。
当C++代码需要调用C语言的函数时,由于函数名修饰的问题,需要使用extern "C"来告诉编译器要按照C语言的命名规则来处理函数名,以确保能够正确链接和调用C语言的函数。
总结起来,extern关键字用于声明外部变量和函数,extern变量存储在静态存储区,extern "C"用于处理C++和C语言之间的函数调用问题。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)