其次,在讀有關Linux的核心程式碼的時候,看到許多宣告成 static 的函數,為什麼要宣告成 static 的函數呢?這樣的宣告和一般沒有宣告成 static 的函數有什麼不同?
這個static 的意義是代表此函數不能夠在runtime 時被作業系統在記憶體中swap out,因此核心程式碼大部分都是static
static 在c 當中的用法有下列幾種:
1. function 內的變數使用static 宣告
如:
void MyFun()
{
static int i=0;
}
i 為static,i 的生命週期會到程式結束,但是他的scope 還是在MyFun 中,每次呼叫MyFun . i 的值會keep 上次呼叫最後一次設定的值。
實作範例:
#include <stdio.h>
#include <iostream.h>
void MyFun()
{static int i=1;
printf("static i :%d\n",i++);
}
void MyFun2()
{int i=1;
printf("Non statice i :%d\n",i++);
}
main()
{ int i;
for(i=0;i<2;i++)
{MyFun();
MyFun2();
}
system("PAUSE");
} /* end of main */
2. 在function 外宣告的變數
如:
檔案 abc.c 中寫了如下
static int s_i=0;
int myfun()
{}
此時 s_i 只能在檔案abc.c 中使用,她可以讓abc.c 中所有的 function 看到,他的生命週期也是到程式結束,但是別的.c 檔是無法使用到abc.c 檔中的 s_i。
3. 在function 前面加上static
如:
檔案 123.c 中寫了如下
static void MyFun()
{}
此時MyFun() 只能給這個123.c 這個檔案中的其他function 叫用。
(比較好的說法是MyFun() 這個function 不會被linker 參考到)