1. gzyueqian
      13352868059

      嵌入式開發:在C中使用靜態關鍵字

      更新時間: 2022-08-17 09:23:52來源: 粵嵌教育瀏覽量:7732

        C語言中有許多主題經常讓嵌入式開發人員感到困惑,但靜態關鍵字的使用似乎是更常見的一種。困惑的一點是靜態如何影響局部變量和全局變量。在每種情況下,靜態關鍵字對數據的存儲位置以及它如何在整個程序生命周期中持續存在有不同的影響。靜態關鍵字有三個主要用途;函數中的局部變量、模塊中的全局變量和模塊中的函數。在這篇文章中,我們將研究所有這三種用法,以及它們如何影響變量的存儲位置,以及靜態的使用如何提高代碼質量。

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

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

        


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

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

        靜態關鍵字有許多用途。它最有效的用途是限制模塊或函數中定義的變量的范圍。嵌入式開發人員通過使用靜態,變量和函數可以對外部程序隱藏,從而產生類似于在更現代的面向對象語言中使用私有和公共的行為。

      免費預約試聽課

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

      
      

      1. 亚洲精品影院在线网页 | 日本亚洲五月天在线观看视频 | 亚洲中字幕日产AV片在线 | 亚洲成色最大综合在线 | 在线中文字幕亚洲欧美一区 | 亚洲蜜芽AV中文在线 |