c語言 作用域 鏈結 儲存期

2021-08-04 09:15:15 字數 1535 閱讀 3739

作用域:

作用域描述程式中可訪問識別符號的區域。乙個c變數的作用域可以是塊作用域、函式作用域、函式原型作用域或檔案作用域。塊是用一對花括號括起來的**區域。例如,整個函式體是乙個塊,函式中的任意復合語句也是乙個塊。定義在塊中的變數具有塊作用域,塊作用域變數的可見範圍是從定義處到包含該定義的塊的末尾。另外,雖然函式的形式引數宣告在函式的花括號之前,但是他們也具有塊作用域,屬於函式體這個塊。所以到目前為止,我們使用的區域性變數(包括函式的形式引數)都具有塊作用域。

c變數有3種鏈結屬性:外部鏈結、內部鏈結或無鏈結。具有塊作用域、函式作用域或者函式原型作用域的變數都是無鏈結變數。這意味著這些變數屬於定義他們的塊、函式或原型私有。具有檔案作用域的變數可以是外部鏈結可以是內部鏈結。外部鏈結變數可以在多檔案程式中使用,內部鏈結變數只能在乙個翻譯單元中使用。

注意:正式和非正式術語

c標準用「內部鏈結的檔案作用域」描述僅限於乙個翻譯單元(即乙個源**檔案和它所包含的標頭檔案)的作用域,用「外部鏈結的檔案作用域」描述可延伸至其他翻譯單元的作用域。但是,對程式設計師而言這些術語太長了,一些程式設計師把「內部鏈結的檔案作用域」簡稱為「檔案作用域」,把「外部鏈結的檔案作用域」簡稱為「全域性作用域」或「程式作用域」。

static:

int giants = 5;                             //檔案作用域,外部鏈結

static int dodgers = 3;               //檔案作用域,內部鏈結

int main()

該檔案和同一程式的其他檔案都可以使用變數giants,而變數dodgers屬檔案私有,該檔案中的任意函式都可以使用它。

儲存期

作用域和鏈結描述了識別符號的可見性。儲存期描述了通過這些識別符號訪問的物件的生存期。c物件有四種儲存期:靜態儲存期、執行緒儲存期、自動儲存期、動態分配儲存期。

如果物件具有靜態儲存期,那麼他在程式的執行期間一直存在。檔案作用域變數具有靜態儲存期。注意,對於檔案作用域變數,關鍵字static表明了其鏈結屬性,而非儲存期。以static宣告的檔案作用域變數具有內部鏈結,但是無論是內部鏈結還是外部鏈結,所有的檔案作用域變數都具有靜態儲存期。

執行緒儲存用於併發程式設計,程式執行可被分為多個執行緒。具有執行緒儲存期的物件,從被宣告時到執行緒結束一直存在,以關鍵字_thread_local宣告乙個物件時,每個執行緒都獲得該變數的私有備份。

塊作用域的變數通常都具有自動儲存期。當程式進入定義這些變數的塊時,為這些變數分配記憶體;當退出這個塊時,釋放剛才為變數分配的記憶體。這種做法相當於把自動變數占用的記憶體視為乙個可重複使用的工作區或暫存區。例如,乙個函式呼叫結束後,其變數占用的記憶體可用於儲存下乙個被呼叫函式的變數。

變長陣列稍有不同,他們的儲存期從宣告處到塊的末尾,而不是從塊的開始處到塊的末尾。

C語言 作用域 儲存期 鏈結

作用域描述程式中可訪問識別符號的區域。乙個c變數的作用域可以是塊作用域 函式作用域 函式原型作用域或檔案作用域。翻譯單元和檔案 通常認為的多個檔案在編譯器中可能以乙個檔案出現。例如,通常在源 c副檔名 中包含乙個或多個標頭檔案 h 副檔名 標頭檔案會依次包含其他標頭檔案,所以會包含多個單獨的物理檔案...

C 作用域 儲存期 鏈結

c語言 作用域 儲存期 鏈結屬性 作用域和鏈結描述了識別符號的可見性,作用域描述了這些識別符號的作用範圍,儲存期描述了通過這些識別符號訪問的物件的生存期。1 作用域 塊作用域 用 闊起來的,從宣告開始到 結束 函式作用域 goto 識別符號 的作用域為整個函式。函式原型作用域 函式宣告開始,函式宣告...

作用域 鏈結 儲存期

作用域,分四種 1.塊作用域 block scope 2.函式作用域 function scope 僅限於goto的標籤 3.函式原型作用域 function prototype scope 3.檔案作用域 file scope 在函式和類之外的說明的識別符號具有檔案作用域,其作用域從說明點開始,在...