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關鍵字,函數被定義為靜态函數。