嵌入式軟件中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.pswp.cn/web/23418.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23418.shtml
英文地址,請注明出處:http://en.pswp.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; 傳進來后端…