static和extern
时间: 2023-08-10 14:46:20 浏览: 215
`static`和`extern`都是C语言中的存储类别说明符。
`static`用于局部变量和全局变量上,其作用是改变变量的存储方式和作用域:
- 局部变量:使变量的生命周期与程序的整个执行过程相同,但是作用域限制在定义该变量的函数内部。这意味着该变量只能被定义它的函数访问,而不能被其他函数访问,即使其他函数与该函数属于同一文件。
- 全局变量:使变量的作用域限制在定义该变量的文件内部,不能被其他文件访问。这样可以避免不同文件中同名变量的冲突。
`extern`也用于全局变量上,其作用是声明一个变量,以便在文件间共享:
- 当在一个文件中使用另一个文件中定义的全局变量时,需要在使用的文件中用`extern`显式声明该变量。这样编译器就知道该变量是一个全局变量,并且在链接时可以正确地将其链接到定义它的文件中。
- `extern`也可以用于函数声明,表示该函数在其他文件中定义,需要在该文件中进行声明。这样可以避免在链接时找不到函数定义的错误。
总之,`static`和`extern`都是用于改变变量或函数的作用域和存储方式,但具体用法和作用不同。
相关问题
static和extern的区别
static和extern是C语言中用于声明和定义变量或函数的关键字。
1. static关键字:
- 在全局作用域中,用于限制变量或函数的作用域为当前文件内。
- 在局部作用域中,用于延长变量的生命周期,并保持其值在函数调用之间的持久性。
- 静态变量在程序运行期间只初始化一次,并且在整个程序执行期间保持其值不变。
- 静态函数只能在声明它的文件中使用,不能被其他文件调用。
2. extern关键字:
- 用于声明一个全局变量或函数,在其他文件中定义的变量或函数。
- extern声明的变量或函数可以在其他文件中使用,但不进行内存分配。
- 通过外部链接,在不同的源文件中共享变量或函数的定义。
- 如果一个全局变量或函数没有使用extern关键字进行声明,默认为外部链接。
总结:
static关键字用于限制变量或函数的作用域和生命周期,使其仅在当前文件内可见。而extern关键字用于声明在其他文件中定义的全局变量或函数,实现不同源文件间的共享。
static 和extern的在C语言作用
static和extern是C语言中用来定义变量和函数的关键字。
static关键字用于定义静态变量和静态函数。静态变量在程序运行期间只被初始化一次,而且只能在定义它的源文件中访问,其他文件无法直接访问该变量。静态函数也只能在定义它的源文件中调用,其他文件无法直接调用该函数。静态变量和静态函数的作用域限制在其定义的源文件中,不会与其他文件中同名的变量或函数产生冲突。
extern关键字用于声明一个全局变量或函数,表示该变量或函数在其他文件中定义。使用extern声明的变量或函数可以在当前文件或其他文件中使用。extern关键字通常用于多个源文件共享同一个变量或函数的情况下,避免重复定义。
总结:
- static关键字用于定义静态变量和静态函数,作用域限制在定义的源文件中。
- extern关键字用于声明外部变量和函数,表示在其他文件中定义,可以在当前文件或其他文件中使用。
相关推荐
![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)