其次,在讀有關Linux的核心程式碼的時候,看到許多宣告成 static 的函數,為什麼要宣告成 static 的函數呢?這樣的宣告和一般沒有宣告成 static 的函數有什麼不同?

 

這個static 的意義是代表此函數不能夠在runtime 時被作業系統在記憶體中swap out,因此核心程式碼大部分都是static

 

static c 當中的用法有下列幾種:

 

1. function 內的變數使用static 宣告

 

如:

void MyFun()

{

static int i=0;

}

 

i statici 的生命週期會到程式結束,但是他的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 */

 linuxStatic01.JPG


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 參考到)

arrow
arrow
    全站熱搜

    flykof 發表在 痞客邦 留言(0) 人氣()