extern可以使用static修饰的变量吗
时间: 2023-11-21 22:04:21 浏览: 46
可以,但是没有意义。
extern关键字用于声明一个变量或函数是在其他文件中定义的,该变量或函数的实际定义在其他文件中。而static关键字用于将变量或函数的作用域限制在定义它们的文件中,使它们对其他文件不可见。
因此,用extern修饰的变量必须在其他文件中定义,而不能是static变量。反之,如果变量是static的,则在其他文件中使用extern没有任何意义,因为该变量已经被限制在定义它的文件中。
相关问题
C 变量前面const static extern详细解释
在 C 语言中,变量的前缀可以用来修饰变量的类型、作用域、存储方式等属性。
1. const
const 是常量修饰符,用于修饰变量,表示该变量的值不能被修改。例如:
```
const int a = 10;
```
这里定义了一个 int 类型的常量 a,其值为 10,不能被修改。
2. static
static 是静态修饰符,用于修饰变量和函数。对于变量,它表示该变量的生命周期与程序的运行周期相同,即在程序运行期间只分配一次内存。对于函数,它表示该函数只能在当前文件中被调用,不能被其他文件调用。例如:
```
static int b = 20;
static void print() {
printf("Hello World!\n");
}
```
这里定义了一个静态变量 b,其生命周期与程序的运行周期相同,只会被分配一次内存;同时也定义了一个静态函数 print,它只能在当前文件中被调用。
3. extern
extern 是外部变量修饰符,用于说明该变量不是在当前文件中定义的,而是在其他文件中定义的。例如:
```
extern int c;
```
这里声明了一个 int 类型的变量 c,但并没有给出其定义,而是告诉编译器在其他文件中可以找到它的定义。在使用 extern 修饰符声明的变量,在当前文件中只能被引用,不能被修改。
修饰词static与extern在作为变量的修饰词时功能正好相反, 前者只能修饰局部变量,后者只能修饰全局变量
这句话有误。实际上,`static` 和 `extern` 都可以修饰局部变量和全局变量,只是它们的作用不同。
`static` 修饰的变量会被分配在静态存储区,其生命周期与程序运行期间一致,不会随着函数的结束而销毁,可以用于保持变量的值不变或者限制变量的作用域。
`extern` 修饰的变量则是声明一个全局变量,这个变量可能在其他文件中定义,使用 `extern` 声明可以让当前文件访问到这个变量。
因此,`static` 和 `extern` 的作用是不同的,但都可以修饰局部变量和全局变量。