static 和extern的在C语言作用
时间: 2023-11-06 07:07:06 浏览: 65
static和extern是C语言中用来定义变量和函数的关键字。
static关键字用于定义静态变量和静态函数。静态变量在程序运行期间只被初始化一次,而且只能在定义它的源文件中访问,其他文件无法直接访问该变量。静态函数也只能在定义它的源文件中调用,其他文件无法直接调用该函数。静态变量和静态函数的作用域限制在其定义的源文件中,不会与其他文件中同名的变量或函数产生冲突。
extern关键字用于声明一个全局变量或函数,表示该变量或函数在其他文件中定义。使用extern声明的变量或函数可以在当前文件或其他文件中使用。extern关键字通常用于多个源文件共享同一个变量或函数的情况下,避免重复定义。
总结:
- static关键字用于定义静态变量和静态函数,作用域限制在定义的源文件中。
- extern关键字用于声明外部变量和函数,表示在其他文件中定义,可以在当前文件或其他文件中使用。
相关问题
c语言extern和static的作用
在C语言中,extern和static是两个关键字,它们的作用如下:
1. extern关键字
extern用于声明一个变量或函数是在其他文件中定义的,也就是说,它告诉编译器该变量或函数并没有在本文件中定义,需要在其他文件中寻找定义。在使用extern关键字时,不会为该变量或函数分配内存空间。
示例:
```c
// 文件a.c
extern int num; // 声明变量num在其他文件中定义
// 文件b.c
int num = 10; // 定义变量num并赋值为10
```
2. static关键字
static可以用于变量和函数,其作用如下:
- 对于变量,static可以使变量的作用域限定在当前文件中,即该变量只能在当前文件中被访问。此外,static还可以使变量的生命周期变为整个程序运行期间,即该变量在程序启动时被创建,直到程序结束时才被销毁。
- 对于函数,static可以使函数的作用域限定在当前文件中,即该函数只能在当前文件中被调用。此外,static还可以使函数不能被其他文件调用。
示例:
```c
// 文件a.c
static int num = 10; // 声明静态变量num,作用域仅限于当前文件
static void test() { // 声明静态函数test,作用域仅限于当前文件
printf("Hello World!");
}
// 文件b.c
int main() {
printf("%d", num); // 编译错误,变量num作用域仅限于文件a.c
test(); // 编译错误,函数test作用域仅限于文件a.c
return 0;
}
```
static和extern的区别
static和extern是C语言中用于声明和定义变量或函数的关键字。
1. static关键字:
- 在全局作用域中,用于限制变量或函数的作用域为当前文件内。
- 在局部作用域中,用于延长变量的生命周期,并保持其值在函数调用之间的持久性。
- 静态变量在程序运行期间只初始化一次,并且在整个程序执行期间保持其值不变。
- 静态函数只能在声明它的文件中使用,不能被其他文件调用。
2. extern关键字:
- 用于声明一个全局变量或函数,在其他文件中定义的变量或函数。
- extern声明的变量或函数可以在其他文件中使用,但不进行内存分配。
- 通过外部链接,在不同的源文件中共享变量或函数的定义。
- 如果一个全局变量或函数没有使用extern关键字进行声明,默认为外部链接。
总结:
static关键字用于限制变量或函数的作用域和生命周期,使其仅在当前文件内可见。而extern关键字用于声明在其他文件中定义的全局变量或函数,实现不同源文件间的共享。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![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)