天天看點

C語言的靜态局部變量和靜态函數

C語言的靜态局部變量和靜态函數

在我看來,使用靜态全局變量與普通的全局變量沒有什麼特别的優點,是以本文就不讨論靜态全局變量。

靜态局部變量

在定義局部變量前加上

static

關鍵詞,則此變量就添加了靜态屬性。

靜态局部變量有以下特性:

  • 靜态局部變量被配置設定到全局資料區,在函數結束後,對應的靜态局部變量不釋放。
  • 靜态局部變量隻在第一個定義時進行初始化,後續多次使用均忽略初始化。

因為其具有上述特性,是以可以應用在某些情況來代替全部變量:

某些情況下,我們需要多次調用某函數時對變量進行儲存和更新。我們通常的做法是建立一個全局變量來實作,但是這樣在某些情況下不太合理,因為這樣此變量就脫離了函數本身,變成了一個全局可通路的變量。

而使用靜态局部變量就能既保證變量是局部的特性,又能實作多次調用儲存值的特性。

talk is cheap, show me the code:

#include "main.h"
#include <stdio.h>
#include <stdlib.h>

void func(void)
{
    static int s_value = 1;
    s_value++;

    printf("s_value = %d\r\n",s_value);
}

int main(void )
{
    func();
    /* do something */   
    func();
    return 0;
}
           

運作結果:

ubuntu@006:~/wangl/sample-static$ ./test-static 
s_value = 2
s_value = 3
           

靜态函數

在函數傳回值的前面加上static關鍵字,函數被定義為靜态函數。