嵌入式软件中static的用法

目录

一、引言

二、static关键字的基本用法

四、static的使用场景

五、总结


一、引言

在嵌入式软件开发中,static是一个至关重要的关键字,用于控制变量的存储周期和可见性,以及函数的可见性。本报告将全面介绍static在嵌入式C语言编程中的用法。

二、static关键字的基本用法

  1. 变量定义中的static

    • 局部静态变量:在函数内部定义的static变量,称为局部静态变量。与普通的局部变量不同,局部静态变量在函数调用结束后不会被销毁,而是保持其值和存在。这种特性使得局部静态变量常用于需要跨函数调用保持状态的场景,如计数器或状态标志。

    • 全局静态变量:使用static修饰的全局变量,其作用域仅限于声明它的文件内,其他文件无法直接访问。这有助于避免全局命名空间的污染和变量名的冲突。

  2. 函数定义中的static

    在函数的返回类型前加上static关键字,函数即被定义为静态函数。静态函数只在当前文件中可见,无法被其他文件中的函数调用。这种特性常用于实现只在当前文件中使用的辅助函数,如内部数据处理函数。

三、static的详细特性

  1. 存储周期

    • 局部静态变量:存储在全局数据区,其生命周期从程序开始运行到程序结束。在函数首次调用时初始化,之后的函数调用不再进行初始化。

    • 全局静态变量:同样存储在全局数据区,其生命周期与程序相同。

  2. 可见性

    • 局部静态变量:只在定义它的函数内部可见。

    • 全局静态变量:只在声明它的文件内部可见,其他文件即使使用extern声明也无法访问。

    • 静态函数:只在定义它的文件内部可见,无法被其他文件调用。

  3. 初始化

    • 局部静态变量:如果没有显式初始化,会被程序自动初始化为0。

    • 全局静态变量:如果没有显式初始化,同样会被自动初始化为0。

四、static的使用场景

  1. 需要跨函数调用保持状态的场景,如计数器、状态标志等。
  2. 需要限制变量的作用域,避免全局命名空间的污染和变量名的冲突。
  3. 实现只在当前文件中使用的辅助函数,提高程序的可维护性和可靠性。

五、总结

static关键字在嵌入式软件开发中发挥着重要作用,通过控制变量的存储周期和可见性,以及函数的可见性,提高了程序的效率和可维护性。在编写嵌入式软件时,合理使用static关键字,可以使代码更加清晰、高效和可靠。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

筛斗数据:如何利用数据提取提高营销效果?

要利用数据提取提高营销效果,企业需要采取一系列策略来确保他们能够从收集的数据中获取有价值的见解,并将这些见解应用于营销活动中。以下是一些关键步骤和策略: 1. 定义目标和关键绩效指标:在开始任何数据提取之前,首…

PDF格式分析(八十五)——水印注释(Watermark)

水印注释(PDF1.6及其以上版本),水印可表现为文字、图片、图像,水印大小固定,显示在页面位置固定,而不论打印页的尺寸(注意打印时,可能打印不全哟)。需要注意的是:水印注释没有弹出窗口。 水印注释字典条目如下表: 条目类型说明Subtypename(必填)本词典所描述的注释类型…

【重学C语言】十八、SDL2 图形编程介绍和环境配置

【重学C语言】十八、SDL2 图形编程介绍和环境配置 **SDL2介绍**SDL 2用途SDL 在哪些平台上运行?下载和安装 SDL2安装 SDL2 clion 配置 SDL2 SDL2介绍 SDL2(Simple DirectMedia Layer 2)是一个开源的跨平台多媒体开发库,主要用于游…

最优化练习题

def f(x):return x*x-4*x5 a0,b01,31、均匀搜索 令 δ ( b 0 − a 0 ) / N , a i a 0 i δ , i 1 , 2 , 3 \delta(b_0-a_0)/N,a_ia_0i\delta,i1,2,3 δ(b0​−a0​)/N,ai​a0​iδ,i1,2,3 while b0-a0>0.1:anp.linspace(a0,b0,5)for i in range(1,4):if f(a[i-1])>f…

flutter3-os:基于flutter3.x+dart3+getx手机版os管理系统

flutter3-os-admin跨平台手机后台OS系统。 原创Flutter3.22Dart3.4Getxfl_chart等技术开发仿ios手机桌面OA管理系统。自研栅格化布局引擎、自定义桌面壁纸、小部件、底部Dock菜单、可拖拽悬浮球等功能。 全新自研栅格化OS菜单布局引擎。 使用技术 编辑器:VScode技术…

深入理解feign远程调用的各种超时参数

1. 引言 在spring cloud微服中,feign远程调用可能是大家每天都接触到东西,但很多同学却没咋搞清楚这里边的各种超时问题,生产环境可能会蹦出各种奇怪的问题。 首先说下结论: 1)只使用feign组件,不使用ribbion组件&…

【Text2SQL 论文】How to prompt LLMs for Text2SQL

论文:How to Prompt LLMs for Text-to-SQL: A Study in Zero-shot, Single-domain, and Cross-domain Settings ⭐⭐⭐⭐ arXiv:2305.11853, NeurlPS 2023 Code: GitHub 一、论文速读 本文主要是在三种常见的 Text2SQL ICL settings 评估不同的 prompt constructio…

数据分析必备:一步步教你如何用Pandas做数据分析(18)

1、Pandas 串联 Pandas 连接的操作实例 Pandas提供了各种功能,可以轻松地将Series,DataFrame和Panel对象组合在一起。 pd.concat(objs,axis0,joinouter,join_axesNone,ignore_indexFalse)objs − 这是Series的序列或映射,DataFrame或Panel对…

【云岚到家】-day01-项目熟悉-查询区域服务开发

文章目录 1 云岚家政项目概述1.1 简介1.2 项目业务流程1.3 项目业务模块1.4 项目架构及技术栈1.5 学习后掌握能力 2 熟悉项目2.1 熟悉需求2.2 熟悉设计2.2.1 表结构2.2.2 熟悉工程结构2.2.3 jzo2o-foundations2.2.3.1 工程结构2.2.3.2 接口测试 3 开发区域服务模块3.1 流程分析…

Python接口自动化之使用requests库发送http请求

requests库 ​ 什么是Requests ?Requests 是⽤Python语⾔编写,基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库。它⽐ urllib 更加⽅便,可以节约我们⼤量的⼯作,完全满⾜HTTP测试需求。 ​ 安装:cmd命…

docker 拉取不到镜像的问题:拉取超时

error pulling image configuration: download failed after attempts6: dial tcp 31.13.94.10:443: i/o timeout 首先设置国内的镜像源&#xff1a;复制下面直接执行 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF{"registry-mirrors"…

【POSIX】消息类的格式与使用

本文给出一个MacOS操作系统中的消息类的使用过程示例&#xff08;结合gencat命令&#xff0c;<nl_types.h>头文件以及catopen,catgets,catclose3个函数&#xff09; 首先根据对应的操作系统&#xff0c;查看 gencat 命令 man gencat 可以详细看到其中对于输入文件&…

Spark MLlib 机器学习详解

目录 &#x1f349;引言 &#x1f349;Spark MLlib 简介 &#x1f348; 主要特点 &#x1f348;常见应用场景 &#x1f349;安装与配置 &#x1f349;数据处理与准备 &#x1f348;加载数据 &#x1f348;数据预处理 &#x1f349;分类模型 &#x1f348;逻辑回归 &a…

⌈ 传知代码 ⌋ 辅助任务改进社交帖子多模态分类

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

【自然语言处理】【Scaling Law】语言模型物理学 第3.3部分:知识容量Scaling Laws

语言模型物理学3.3&#xff1a;知识容量Scaling Laws 论文名称&#xff1a;Physics of Language Models: Part 3.3, Knowledge Capacity Scaling Laws 论文地址&#xff1a;https://arxiv.org/pdf/2404.05405 相关博客 【自然语言处理】【Scaling Law】Observational Scaling …

R语言探索与分析17-股票题目

Value at Risk&#xff08;VaR&#xff09;是一种统计技术&#xff0c;用于量化投资组合在正常市场条件下可能遭受的最大潜在损失。它是风险管理和金融领域中一个非常重要的概念。VaR通常以货币单位表示&#xff0c;用于估计在给定的置信水平和特定时间范围内&#xff0c;投资组…

OpenCV的小部件最基本范例

OpenCV也有与PYQT类似的小部件&#xff0c;例如滑块slider。OpenCV可以用与PYQT类似的“信号与槽”方法&#xff0c;也可以在函数中直接查询小部件的值。 import cv2 import numpy as npcv2.namedWindow(Show1) image np.zeros((100, 400, 3), np.uint8) # 创建一个空白内容…

JavaScript基础知识4(数组、函数、参数、作用域、具名和匿名函数、逻辑运算符短路、转化布尔类型)

JavaScript基础知识4&#xff08;数组、函数、参数、作用域、具名和匿名函数、逻辑运算符短路、转化布尔类型&#xff09; 数组数组是什么&#xff1f;数组的基本使用定义数组和数组单元访问数组和数组索引数据单元值类型数组长度属性 操作数组 函数声明和调用声明&#xff08;…

(面试官问我微服务与naocs的使用我回答了如下,面试官让我回去等通知)微服务拆分与nacos的配置使用

微服务架构 正常的小项目就是所有的功能集成在一个模块中&#xff0c;这样代码之间不仅非常耦合&#xff0c;而且修改处理的时候也非常的麻烦&#xff0c;应对高并发时也不好处理&#xff0c;所以 我们可以使用微服务架构&#xff0c;对项目进行模块之间的拆分&#xff0c;每一…

前端传参数后端变量类型能够接受到List却无法接收到值

问题描述 今天写了个接口&#xff0c;下图所示 ReqVO里是这样的&#xff1a; 然后前端去请求&#xff0c;从请求结果中看发现这里值是在的&#xff08;有经验的可能就看出来了otherInfo.id: 这样以参数后端是接收不到的&#xff0c;但是当时没发现&#xff09; 传进来后端…