函数:static和extern

发布于:2025-04-01 ⋅ 阅读:(55) ⋅ 点赞:(0)

0.前言

在正式开始之前先说作用域和生命周期

作用域:

作用域有分为局部变量和全局变量

局部变量:一个变量仅在其中一段代码内起作用

全局变量:所有的代码都可以使用这个变量

生命周期:

生命周期是一个代码从运行开始到结束为一个生命周期,局部变量的生命周期为作用域开始到局部的作用域结束,全局变数的生命周期为整个代码的开始到结束

1.extern

extern是专门用来声明外部符号的

如果没有使用extern,想要使用外部符号运行时会报错

2.static

static可以用来修饰:

局部变量

全局变量

函数

2-1修饰局部变量

我们先写一段代码:

void test()
{
	int a = 1;
	a++;
	printf("%d ", a);

}
int main()
{
	int a = 0;
	for (a = 0; a <= 10; a++)
	{
		test();
	}
	return 0;
}

这段代码当我运行时,会打印出10个2,因为当进入void test运行时,其作用域只在void test里运行,出了作用域生命周期结束,自然只出现10个2

这次我们加上static

void test()
{
	static int a = 1;
	a++;
	printf("%d ", a);

}
int main()
{
	int a = 0;
	for (a = 0; a <= 10; a++)
	{
		test();
	}
	return 0;
}

则会打印数字2到12

至于为啥会这样是因为经过static修饰过后局部的变量从栈区储存到了静态区,变得跟程序生命周期一样长,只要代码运行结束变量才销毁,内存回收,但作用域是不变的

2-2修饰全局变量

再来写一段代码:

add.c:

int a = 5000;

test.c

extern int a;

void test()
{
	printf("%d\n", a);
}
int main()
{
	test();
	printf("%d\n", a);
	return 0;
}

如果再add.c里加上static呢?

static int a = 5000;

会直接报错

当static去修饰全局变量时那个全局变量只能在那个文件内使用,函数同理

2-3修饰函数

在来一段代码:
add.c

int test(int x, int y)
{
	return x * y;
}

test.c

int main()
{
	int a = 0;
	int b = 0;
	scanf_s("%d%d", &a, &b);
	int c = test(a,b);
	printf("%d", c);
	return 0;
}

以上代码运行都没有任何问题,但是add.c加上static会发生什么事呢?

static int test(int x, int y)
{
	return x * y;
}

会直接报错,和修饰全局变量的结果一样

制作不易,赏个赞吧!


网站公告

今日签到

点亮在社区的每一天
去签到