c语言中的extern和static关键字
程序员文章站
2022-07-11 17:57:58
...
定义在函数内的变量称为局部变量,定义在函数外的变量称为全局变量。全局变量的作用域是从申明处到文件结束;局部变量的作用域是在定义局部变量的最大的两个{ }之间。
#include<stdio.h>
int a = 1; //全局变量
int main()
{
int b = 2; //定义局部变量,作用域是整个main函数
if(1>0)
{
int d = 2; //局部变量,作用域在整个if语句范围内
printf("%d\n", b); //输出2
}
printf("%d\n", d); //程序将会报错,说d这个变量没有定义,因为超出了其作用域
printf("%d %d\n", a, b); //输出:1 2
return 0;
}
extern关键字只用于对全局变量进行申明,局部变量等不能用extern关键字进行申明。
- 在同一个文件当中:
#include<stdio.h>
#include<stdlib.h>
int func()
{
extern a; //使用时需要用extern进行申明
printf("%d\n", a);
return 0;
}
//定义全局变量,其作用域为从变量定义处到文件结束
//若在定义的全局变量前面的函数要使用该全局变量,需要用extern进行说明。
int a = 10;
int main()
{
printf("%d\n", a); //使用全局变量时不需要说明
return 0;
}
- 在不同的文件当中:在file2.c中定义的var,想在file1.c中进行使用,需要用extern var; 来进行申明
//file2.c
int var = 8;
// file1.c
#include<stdio.h>
extern var; //引用另一个文件当中定义的全局变量,先进行申明
int main()
{
printf("%d\n", var);
return 0;
}
static关键字的使用:有static修饰的不一定是全局变量,也可以是静态局部变量。有static修饰的全局变量和函数不能在被其他的文件使用,限定在定义它的源文件当中使用。全局变量通过extern可以被同一个程序文件的其他程序使用,静态全局变量使用extern也不行。
局部静态变量的使用:局部静态变量保存在静态存储区,在整个程序运行期间都存在,但是只能在定义该局部静态变量的函数当中使用该局部变量。
#include<stdio.h>
#include<stdlib.h>
int func()
{
static b = 2; //定义一个局部静态变量
printf("%d\n", b); //输出b的值
return 0;
}
int main()
{
func();
/*
* printf("%d\n", b);
* 这里会报错,因为b虽然存储在静态存储区,但是其只能在fun()函数的范围内使用,他是局部静态变量
*/
return 0;
}
参考:
https://www.cnblogs.com/idmask/p/4898732.html
https://blog.csdn.net/zxnsirius/article/details/51029551?
https://blog.csdn.net/qq_37858386/article/details/79064900?
上一篇: C语言中static关键字的作用