C語言中static關鍵字詳解

2022-09-22 02:15:12 字數 1691 閱讀 5457

c語言中staic關鍵字很簡單,簡單到你的任何乙個專案中可以不寫乙個staic關鍵字也是沒有問題的。寫這篇章主要是一下自己的staic的理解和應用,當然在章開頭依舊要照本宣科簡述一下static關鍵字。

static關鍵字在嵌入式c語言當中很簡單,它有三個作用:

作用一:在函式體,乙個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變。

void test1(void

在這個例子中,變數a是區域性變數,變數b為區域性靜態變數。作用一說明了區域性靜態變數b的特性:在函式體,乙個被宣告為靜態的變數(也就是區域性靜態變數)在這一函式被呼叫過程中維持其值不變。這個時候作用和全域性變數是同的。

下面簡單的例子,宣告函式的乙個區域性變數,並設為static型別,作為乙個計數器,這樣函式每次被呼叫的時候就可以進行計數。這個統計的方法是很好的,因為其他函式能修改這個變數(程式跑飛除外)。

void

count();

intmain()

void

count()

輸出結果為:

i h**e been called 1

times.

i h**e been called

2times.

i h**e been called

3 times.

這裡注意兩點:

區域性靜態量的作用於仍然有改變,仍然在數內部有效

區域性靜態變數儲存位置變為了記憶體,不再儲存在棧裡

關於區域性靜態變數儲存的問題,不太懂的同學移步之前章《c語言在stm32中的記憶體分配》。

作用二:在模組內(但在函式體外),乙個被宣告為靜態的變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問。它是乙個本地的全域性變數。

這樣定義的變數也稱為全域性靜態變數:在全域性變數之前加上關鍵字static,全域性變數就被定義成為乙個全域性靜態變數。也就是上述作用二中提到的在模組內(但在函式體外)宣告的靜態變數。

定義全域性靜態變數的好處:

它的作用域只在這個檔案中,不會被其他檔案所訪問,修改,是乙個本地的區域性變數。

其他檔案中可以使用相同名字的變數,不會發生衝突。

作用三:在模組內,乙個被宣告為靜態的函式只可被這一模組內的其它函式呼叫。那就是,這個函式被限制在宣告它的模組的本地範圍內使用。

這樣定義的函式也成為靜態函式:在函式的返回型別前加上關鍵字static,函式就被定義成為靜態函式。

定義靜態函式的好處:

其他檔案中可以定義相同名字的函式,不會發生衝突

靜態函式不能被其他檔案所用。它定義乙個本地的函式。

對於上面講到的,static關鍵字很簡單,基本就是為了**模組化。在相當一段時間內,我在工作用基本沒有用到static關鍵字,在微控制器的**中,一般情況下乙個人可以管理整個**工程,所以並沒有大量使用static關鍵字。

在之前的文章《stm32「隱藏的定時器」-dwt》測量**執行時間的**如下:

float dtw_time_difference_ms(void

)

用到了static關鍵字,我也體會到了使用static關鍵字的好處,對於函式封裝有好處,當你需要將乙個功能函式封裝起來,達到直接拷貝走這個函式就能用的程度,這個時候需要乙個全部變數,這個時候在函式裡面乙個靜態區域性變數。

詳解C語言中的Static關鍵字

首先,static關鍵字的意思是靜態的,用於修飾區域性變數,全域性變數和函式,修改其資料儲存型別 1.區域性變數 在任意乙個函式內部定義的變數 不加static 初始值不確定,出函式自動銷毀,存放於棧區。使用static修飾這個變數時,編譯器會把她初始化為零,儲存於靜態區,函式返回時值保持不變,出函...

C語言中static關鍵字的作用詳解

在c語言中,static的字面意思很容易把我們匯入歧途,其實它的作用有三條。1 先來介紹它的第一條也是最重要的一條 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。為理解這句話,我舉例來說明。我們要同時編譯兩個原始檔,乙個是a.c,另乙個是main.c。...

C語言中static關鍵字的作用詳解

在c語言中,static的字面意思很容易把我們匯入歧途,其實它的作用有三條。1 先來介紹它的第一條也是最重要的一條 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。為理解這句話,我舉例來說明。我們要同時編譯兩個原始檔,乙個是a.c,另乙個是main.c。...