函数:static和extern

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;
}

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

制作不易,赏个赞吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值