static 型別宣告符在c語言裡面主要有三個用途:
1、宣告靜態區域性變數。
2、宣告靜態外部全域性變數。
3、宣告靜態外部函式。
下面是我整理的有關上面三個用法的解釋說明。另外網友xiaocai0001的《static用法小結》一文有更詳細的解釋,請參考。
靜態區域性變數(與auto對比)
1、 儲存空間分配、作用域和生存期
static分配在靜態儲存區,作用域僅僅限於宣告該變數的函式內部。在程式整個執行期間都不釋放,生存期貫穿於程式執行的整個過程。
auto型別分配在棧上,屬於動態儲存類別,佔動態儲存區空間,作用域僅僅限於宣告該變數的函式內部。函式呼叫結束後自動釋放,生存期不過是在宣告該變數的函式內部。
2、賦初值時的處理方式
static靜態區域性變數在編譯時賦初值,即只賦初值一次;
auto自動變數賦初值是在函式呼叫時進行,每呼叫一次函式重新給一次初值,相當於執行一次賦值語句。
3、未賦初值時的處理方式
如果在定義區域性變數時不賦初值的話:
static靜態區域性變數,編譯時自動賦初值0(對數值型變數)或空字元(對字元變數)。
auto自動變數,如果不賦初值則它的值是乙個不確定的值。
靜態外部全域性變數
在c語言中static還用來宣告靜態外部全域性變數,那麼這個全域性變數的作用域就被限制在本檔案內部。
外部變數(即全域性變數)是在函式的外部定義的,它的作用域為從變數定義處開始,到本程式檔案的末尾。如果外部變數不在檔案的開頭定義,其有效的作用範圍只限於定義處到檔案終了。如果在定義點之前的函式想引用該外部變數,則應該在引用之前用關鍵字extern對該變數作「外部變數宣告」。表示該變數是乙個已經定義的外部變數。有了此宣告,就可以從「宣告」處起,合法地使用該外部變數。
而如果我們宣告的全域性變數不想被其他檔案訪問和使用又該怎麼辦?
那就是在宣告的時候前面加上關鍵字static。
靜態外部函式
在c語言中我們的函式預設都是全域性的,也就是說你可以呼叫其他檔案中的函式。在使用的時候,我們象前面一樣在標頭檔案中加上extern就可以了。但是有時候我們寫的函式並不想讓別的檔案訪問和呼叫,那麼我們在宣告函式的時候前面加上static就可以了。
使用內部函式的好處有二:
1、可以讓某些內部函式不為人所能使用,而僅僅讓呼叫者使用他能使用的東西,有利於保護**。
2、不同的人編寫不同的函式時,不用擔心自己定義的函式,是否會與其它檔案中的函式同名。
c語言中static型別
靜態變數都儲存與靜態儲存區中。1.靜態區域性變數 靜態區域性變數屬於靜態儲存方式,它具有以下特點 1 靜態區域性變數在函式內定義 它的生存期為整個源程式,但是其作用域仍與自動變數相同,只能在定義該變數的函式內使用該變數。退出該函式後,儘管該變數還繼續存在,但不能使用它。2 允許對構造類靜態區域性量賦...
C語言隨筆 型別宣告
有位同學說,老師,我執行如下 結果報錯了 include int main 報錯結果是 configuration test win32 debug compiling.demo.c d ccode test demo.c 4 error c2059 syntax error type error ...
C語言中static加在函式宣告前
私有函式只有該類的成員變數或成員函式可以訪問。在c語言中,也有 private函式 它就是接下來要說的static函式,完成物件導向程式設計中private函式的功能。當你的程式中有很多個原始檔的時候,你肯定會讓某個原始檔只提供一些外界需要的介面,其他的函式可能是為了實現這些介面而編寫,這些其他的函...