06.变量的作用域extern和static

全局变量

在函数外定义,可被本文件及其它文件中的函数所共用,若其它文件中的函数调用此变量,须用extern声明
全局变量的生命周期和程序运行周期一样
不同文件的全局变量不可重名

静态(static)全局变量

在函数外定义,作用范围被限制在所定义的文件中
不同文件静态全局变量可以重名,但作用域不冲突
static全局变量的生命周期和程序运行周期一样,同时staitc全局变量的值只初始化一次

void fun(int i)
{
	//a只能被初始化一次,但是可以多次赋值
	static int a = 10;
	cout << "第" << i << "个是===="<<  a++ << endl;//输出
}

int main()
{
	for(int i = 0; i < 10; i++)
	{
		fun(i);
		//cout << "第"<< i <<"个是====" << i << endl;
	}
	
	system("pause");
	return EXIT_SUCCESS;
}

extern全局变量声明

extern int a;声明一个变量,这个变量在别的文件中已经定义了,这里只是声明,而不是定义。

类型

作用域

生命周期

auto变量

一对{}内

当前函数

static局部变量

一对{}内

整个程序运行期

extern变量

整个程序

整个程序运行期

static全局变量

当前文件

整个程序运行期

extern函数

整个程序

整个程序运行期

static函数

当前文件

整个程序运行期

register变量

一对{}内

当前函数

具体使用如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>


//extern int a = 10; 默认外部链接
int a = 10; //全局区
//静态全局变量是内部链接
static int b = 20; //静态区

//内部链接和外部链接有什么区别?
//1. 如果变量是内部链接的话,那么此变量只能在当前文件内访问
//2. 如果是变量是外部链接的话,那么此变量可以被其他文件使用


//1. 全局静态变量和局部静态变量都存储在静态区,都是在程序运行期间都是合法有效
//2. 局部静态变量符号的可见范围仅限于当前函数内部,全局静态变量可见范围从定义到文件结尾

//头文件不要放定义,只能放声明

void test01()
{
	static int c = 30; //静态区
}

//头文件不参与编译,每一个.c文件,我们叫做一个编译单元
//编译器独立编译每一个.c文件
void test02()
{
	//声明,表示告诉编译器这个符号是存在的,你让我先编译通过,让连接器去找到底这个符号在那
	extern int g_a;

	printf("g_a = %d\n", g_a);
}



int main(){

	test02();

	system("pause");
	return EXIT_SUCCESS;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值