24h購物| | PChome| 登入
2001-02-01 15:00:42| 人氣14,213| 回應0 | 上一篇 | 下一篇

[C語言]靜態的迷思-static

推薦 0 收藏 0 轉貼0 訂閱站台

在 C 裡面常常看到 static 這個 keyword, 用在變數或函式之前不一, 既然用了呢, 就表示它的使用與否會有不一樣的意思.

區域變數
一般的區域變數是在每次進此區域時才重新建立初始化, 在離開該區域時, 結束掉該變數的存在; 如果區域變數前面有個 static 就不一樣了, 它將是一個永續存在的空間, 但對 compiler 來說, 卻不允許除該區域之外的程式碼以變數名稱來存取這個變數.

全域變數
而全域變數則是永續存在且所有的 .c 檔都可以經由宣告而來存取的; 而加上了 static 後, compiler 即不允許除了該 .c 檔之外的其它 .c 檔以變數名稱來存取該變數, 即使它們未來是要 link 在一起成一個執行檔也一樣不允許.

函式
一般的函式只要存在, 即可經由宣告來呼叫該函式; 若在該函式前加入 static 的指定的話, 則同全域變數一般, 不允許除該函式所在的 .c 檔之外的程式碼以該函式的名稱來呼叫此靜態函式, 此也意即用 function pointer 的方式是可以的.

用 static 在全域變數或 function 上有好處是可以減少 compiler 在做 linking 時所建立的 global symbol table 的 size, 也可以減少 symbol 名稱相同的機會, 而在區域變數上, 也可以省卻使用 global variable 的方式, 用簡易的方式宣告且使用位於 heap 的變數, 且我們可以知道該靜態區域變數只會為此區域所用. :)

台長: 約書亞
人氣(14,213) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電)

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文