tft每日頭條

 > 生活

 > 嵌入式c語言中static的應用場合

嵌入式c語言中static的應用場合

生活 更新时间:2024-11-27 10:19:53

我們在嵌入式開發中,用static聲明的變量,會有兩方面的特征:

1、變量會被放在程序的全局存儲區中,這樣可以在下一次調用的時候,還可以保持原來的賦值。這一點是它與堆棧變量和堆變量的區别。

2、變量用static定義後會告知編譯器,自己僅僅在變量的作用範圍内可見。這一點是它與全局變量的區别。

static的應用場景

關鍵字static主要有以下兩個應用場景:

1、若全局變量僅在單個C文件中訪問,則可以将這個變量修改為靜态全局變量,以降低模塊間的耦合度。

2、若全局變量僅由單個函數訪問,則可以将這個變量改為該函數的靜态局部變量,以降低模塊間的耦合度。

實際上我們可以發現,定義static變量的好處,除了降低模塊間的耦合度外,也保證了變量的密封性,而且不占用堆棧空間。不會出現因靜态全局變量過大,而導緻堆棧溢出的情況。

嵌入式c語言中static的應用場合(嵌入式C語言中關鍵字static的用法)1

堆棧溢出

但是,定義static變量也會存在一個問題。

不可重入函數

我們在設計和使用訪問動态全局變量、靜态全局變量和靜态局部變量的函數時,需要考慮重入問題。比如,

unsigned int sum_int( unsigned int base )

{

 unsigned int index;

 static unsigned int sum = 0; // 注意,是static類型的。

 for (index = 1; index <= base; index )

 {

  sum = index;

 }

 return sum;

}

這個函數就是不可重入的。所謂的函數是可重入的,也可以說是可預測的,即隻要輸入數據相同就應産生相同的輸出。這個函數之所以是不可預測的,就是因為函數中使用了static變量,因為static變量的特征,這樣的函數被稱為:帶“内部存儲器”功能的的函數。因此如果我們需要一個可重入的函數,那麼,我們一定要避免函數中使用static變量。

将上面的函數修改為可重入的函數很簡單,隻要将聲明sum變量中的static關鍵字去掉,變量sum即變為一個auto 類型(auto是默認的,不用聲明)的變量,函數即變為一個可重入的函數。

當然,有些時候,在函數中是必須要使用static變量的,比如當某函數的返回值為指針類型時,則必須是static的局部變量的地址作為返回值。若為auto類型,則返回為錯誤指針。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved