1. gzyueqian
      13352868059

      嵌入式開發(fā):在C中使用靜態(tài)關(guān)鍵字

      更新時(shí)間: 2022-08-17 09:23:52來源: 粵嵌教育瀏覽量:7837

        C語言中有許多主題經(jīng)常讓嵌入式開發(fā)人員感到困惑,但靜態(tài)關(guān)鍵字的使用似乎是更常見的一種。困惑的一點(diǎn)是靜態(tài)如何影響局部變量和全局變量。在每種情況下,靜態(tài)關(guān)鍵字對(duì)數(shù)據(jù)的存儲(chǔ)位置以及它如何在整個(gè)程序生命周期中持續(xù)存在有不同的影響。靜態(tài)關(guān)鍵字有三個(gè)主要用途;函數(shù)中的局部變量、模塊中的全局變量和模塊中的函數(shù)。在這篇文章中,我們將研究所有這三種用法,以及它們?nèi)绾斡绊懽兞康拇鎯?chǔ)位置,以及靜態(tài)的使用如何提高代碼質(zhì)量。

        一般來說,靜態(tài)是一個(gè)存儲(chǔ)類說明符,可以應(yīng)用于任何數(shù)據(jù)類型。雖然靜態(tài)有許多定義,但最適合所有這三種用途的定義是,靜態(tài)告訴編譯器限制變量或函數(shù)的范圍,同時(shí)允許它在程序的整個(gè)生命周期中保持不變。這允許使用靜態(tài)封裝或隱藏變量,以防止意外訪問。然后,開發(fā)人員能夠嚴(yán)格控制如何在模塊中訪問變量,這被認(rèn)為是良好的編程實(shí)踐。

        當(dāng)在函數(shù)中聲明變量而沒有使用靜態(tài)時(shí),該變量被認(rèn)為是自動(dòng)變量。自動(dòng)變量被創(chuàng)建并存儲(chǔ)在堆棧中(或CPU寄存器中),當(dāng)函數(shù)返回時(shí)被銷毀。如果嵌入式開發(fā)人員希望函數(shù)中的變量在兩次調(diào)用之間保持其值,那么該變量將被聲明為靜態(tài)變量。在這種情況下,變量將不再存儲(chǔ)在堆棧中,而是存儲(chǔ)在全局內(nèi)存空間中;然而,即使變量本身存儲(chǔ)在全局空間中,編譯器也會(huì)對(duì)變量施加局部作用域,使其僅在該函數(shù)中可見!模塊中的其他函數(shù)不知道這個(gè)變量的存在。不僅變量將在程序的整個(gè)生命周期中保持其值,靜態(tài)變量也將僅在第一次調(diào)用函數(shù)時(shí)被初始化。

        


        在模塊的全局范圍內(nèi)定義一個(gè)變量(但在整個(gè)程序的上下文中不是全局的)隱式地聲明該變量是靜態(tài)的。這使得變量被定義在全局內(nèi)存空間中,同時(shí)將變量的范圍限制在模塊中。將這些變量顯式聲明為靜態(tài)總是一個(gè)好主意,以提醒自己它們有一個(gè)模塊范圍,并且不是自動(dòng)變量。良好的編程實(shí)踐表明,變量應(yīng)該在最局部的適用范圍內(nèi)聲明。因此,如果變量只在單個(gè)函數(shù)中使用,那么嵌入式開發(fā)人員聲明變量的更合適的位置可能是在函數(shù)本身而不是模塊范圍內(nèi)。在模塊級(jí)聲明的靜態(tài)變量只在處理器初始化時(shí)發(fā)生的C復(fù)制過程中初始化一次。

        靜態(tài)也可以應(yīng)用于模塊中的函數(shù)。默認(rèn)情況下,函數(shù)被隱式聲明為extern。這意味著,如果一個(gè)函數(shù)是在c文件中定義的,而不是在頭文件中原型化的,編譯器仍然能夠鏈接到該函數(shù)(可能會(huì)給開發(fā)人員一些警告)。為了使一個(gè)函數(shù)只在一個(gè)模塊中可用,開發(fā)人員可以將靜態(tài)關(guān)鍵字放在函數(shù)聲明之前。這將有效地對(duì)外界隱藏該函數(shù),并保護(hù)該函數(shù)及其變量的使用。

        靜態(tài)關(guān)鍵字有許多用途。它最有效的用途是限制模塊或函數(shù)中定義的變量的范圍。嵌入式開發(fā)人員通過使用靜態(tài),變量和函數(shù)可以對(duì)外部程序隱藏,從而產(chǎn)生類似于在更現(xiàn)代的面向?qū)ο笳Z言中使用私有和公共的行為。

      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 色花午夜福利网站 | 亚洲人妖一区二区 | 色一情一乱一伦一区二区三区 | 久久国产免费观看精品3 | 最新精品国偷自产在线91 | 亚洲色大情久久久 |