C與C 的static關鍵字的分析

2021-05-12 19:37:11 字數 2389 閱讀 5789

轉貼乙個jj的文章,寫的非常非常清楚。

【原文】

【我的總結】

1)、變數會被放在程式的全域性儲存區中,這樣可以在下一次呼叫的時候還可以保持原來的賦值;而且會被賦初始值。這一點是它與堆疊變數和堆變數的區別。

2)、變數用static告知編譯器,自己僅僅在變數的作用範圍內(比如檔案內)可見。這一點是它與全域性變數的區別。

3)、static函式不可被作用域範圍外的使用,而extern或者沒有修飾符的函式可以被作用域外部使用。

【**】

c語言中static 變數

1.  static 變數

靜態變數的型別 說明符是static。 靜態變數當然是屬於靜態儲存方式,但是屬於靜態儲存方式的量不一定就是靜態變數。 例如外部變數雖屬於靜態 儲存方式,但不一定是靜態變數,必須由 static加以定義後才能成為靜態外部變數,或稱靜態全域性變數。

2. 靜態區域性變數

靜態區域性變數屬於靜態儲存方式,它具有以下特點:

(1)靜態區域性變數在函式內定義  它的生存期為整個源程式,但是其作用域仍與自動變數相同,只能在定義該變數的函式內使用該變數。退出該函式後, 儘管該變數還繼續存在,但不能使用它。

(2)允許對構造類靜態區域性量賦初值  例如陣列,若未賦以初值,則由系統自動賦以0值。

(3)對基本型別的靜態區域性變數若在說明時未賦以初值,則系統自動賦予0值。而對自動變數不賦初值,則其值是不定的。 根據靜態區域性變數的特點, 可以 看出它是一種生存期為整個源程式的量。雖然離開定義它的函式後不能使用,但如再次呼叫定義它的函式時,它又可繼續使用, 而且儲存了前次被呼叫後留下的 值。 因此,當多次呼叫乙個函式且要求在呼叫之間保留某些變數的值時,可考慮採用靜態區域性變數。雖然用全域性變數也可以達到上述目的,但全域性變數有時會造成 意外的***,因此仍以採用區域性靜態變數為宜。

3.靜態全域性變數

全域性變數(外部變數)的說明之前再冠以static 就構 成了靜態的全域性變數。全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式。 這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性 變數的作用域是整個源程式, 當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。 而靜態全域性變數則限制了其作用域, 即只在 定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用, 因此 可以避免在其它原始檔中引起錯誤。從以上分析可以看出, 把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數 後是改變了它的作用域, 限制了它的使用範圍。因此static 這個說明符在不同的地方所起的作用是不同的。

4. static 函式…..

內部函式和外部函式

當乙個源程式由多個原始檔組成時,c語言根據函式能否被其它原始檔中的函式呼叫,將函式分為內部函式和外部函式。

1 內部函式(又稱靜態函式)

如果在乙個原始檔中定義的函式,只能被本檔案中的函式呼叫,而不能被同一程式其它檔案中的函式呼叫,這種函式稱為內部函式。

定義乙個內部函式,只需在函式型別前再加乙個「static」關鍵字即可,如下所示:

static  函式型別  函式名(函式引數表)

關鍵字「static」,譯成中文就是「靜態的」,所以內部函式又稱靜態函式。但此處「static」的含義不是指儲存方式,而是指對函式的作用域僅侷限於本檔案。

使用內部函式的好處是:不同的人編寫不同的函式時,不用擔心自己定義的函式,是否會與其它檔案中的函式同名,因為同名也沒有關係。

2 外部函式

外部函式的定義:在定義函式時,如果沒有加關鍵字「static」,或冠以關鍵字「extern」,表示此函式是外部函式:

[extern]  函式型別  函式名(函式引數表)

呼叫外部函式時,需要對其進行說明:

[extern]  函式型別  函式名(引數型別表)[,函式名2(引數型別表2)……];

[案例]外部函式應用。

(1)檔案mainf.c

main()

(2)檔案subf1.c

……extern  void input(……)                           /*定義外部函式*/

(3)檔案subf2.c

……extern  void process(……)                     /*定義外部 函式*/

(4)檔案subf3.c

……extern void output(……)                        /*定義外部函式*/

C 的static關鍵字

本文 自vc知識庫 c 的static關鍵字 c 的static有兩種用法 面向過程程式設計中的static和物件導向程式設計中的static。前者應用於普通變數和函式,不涉及類 後者主要說明static在類中的作用。一 面向過程設計中的static 1 靜態全域性變數 在全域性變數前,加上關鍵字s...

C 的static關鍵字

c 的static關鍵字 c 的static有兩種用法 面向過程程式設計中的static和物件導向程式設計中的static。前者應用於普通變數和函式,不涉及類 後者主要說明static在類中的作用。一 面向過程設計中的static 1 靜態全域性變數 在全域性變數前,加上關鍵字static,該變數就...

C 的static關鍵字

c 的static關鍵字 c 的static有兩種用法 面向過程程式設計中的static和物件導向程式設計中的static。前者應用於普通變數和函式,不涉及類 後者主要說明static在類中的作用。一 面向過程設計中的static 1 靜態全域性變數 在全域性變數前,加上關鍵字static,該變數就...