欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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关键字进行申明。

  1. 在同一个文件当中:
#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;
}
  1. 在不同的文件当中:在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语言