当前位置: 首页 > news >正文

函数: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;
}

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

制作不易,赏个赞吧!

http://www.dtcms.com/a/103183.html

相关文章:

  • 3 通过图形化方式创建helloworld
  • QML输入控件: TextField(文本框)的样式定制
  • 408 计算机网络 知识点记忆(3)
  • mysql JSON_ARRAYAGG联合JSON_OBJECT使用查询整合(数组对象)字段
  • “钉耙编程”2025春季联赛(2)题解(更新中)
  • 在 Cloud Run 上使用 Gemini API 构建聊天应用
  • linux 服务器创建服务器启动后服务自启动
  • 突破反爬困境:SDK开发,浏览器模块(七)
  • 汇编学习之《标志寄存器》
  • 音视频基础(图像的基础概念)
  • 5.2.1 WPF 通过ItemControl自己做柱状图
  • 英飞凌 TC3xx功能安全开发-MONBIST
  • Redis:List 类型 内部实现、命令及应用场景
  • 探秘Transformer系列之(21)--- MoE
  • 微前端实现方案对比Qiankun VS npm组件
  • EviMed:左手综述内容,右手参考文献!三步产出可溯源的万字医学综述!
  • python系统之综合案例:用python打造智能诗词生成助手
  • 【Python使用】嘿马python数据分析教程第1篇:Excel的使用,一. Excel的基本使用,二. 会员分析【附代码文档】
  • hadoop集群配置-scp命令
  • CTF类题目复现总结-[MRCTF2020]Hello_ misc 1
  • 分治算法之凸包问题
  • 解决ant-ui 表单校验通过但是未清楚校验提示的bug 示例
  • LeetCode算法题(Go语言实现)_21
  • 《C++知识点之拷贝构造函数》
  • Linux系统安装MySQL 8.0完整指南(新手友好版)
  • 小智机器人关键函数解析:MqttProtocol::SendAudio()对输入的音频数据进行加密处理,通过UDP发送加密后的音频数据
  • spring boot前后端开发上传文件时报413(Request Entity Too Large)错误的可能原因及解决方案
  • 统计局数据分析网站基于Spring Boot SSM原创
  • 各种环境下安装软件的命令对比与总结
  • 算法导论(动态规划)——简单多状态