[C] 關於static variable的宣告

static variable跟一般variable的宣告方式, 差別是在程式執行開始到結束之前都存在記憶體中.

(1)當static variable為Local variable時:
void myFunc(int n)
{
static int num = 0;
num += n;
}
=> num在宣告為static後, 儘管離開myFunc()後仍會一直存在, 而且每次執行myFunc會進行num的累加(而不是從0開始)

(2)當static variable為global variable時:
當在a.c中宣告 static int num = 0後, num只能被a.c這個檔案所引用, 而不能被其他.c或.h檔使用(即無法在其他檔案中宣告extern int num;)
(NOTE)若在.h檔中宣告int num; 表示每個引用的.c檔會發生錯誤(multiple definition). 若宣告為static int num; 則每個引用的.c檔都會copy一份num變數.
建議最好不要在.h檔中宣告變數, 若需要不同.c檔共用同一個變數, 可以使用:
(a)在某個.c檔裡頭宣告, 然後在其.h檔宣告extern. 需要引用該變數的.c檔則將該.h加入
(b)使用function call的方式取得

若每個.c都需要有各自的int num, 則各自宣告為static int num.

恩, 目前理解是如此, 有問題再來修改...

Comments

Popular posts from this blog

股票評價(Stock Valuation) - 股利折現模型

openwrt feed的使用

How to convert Markdown into HTML