作用域 鏈結 儲存期

2021-07-27 11:37:35 字數 1192 閱讀 4721

作用域,分四種:

1.塊作用域(block scope)

2.函式作用域(function scope)

僅限於goto的標籤

3.函式原型作用域(function prototype scope)

3.檔案作用域(file scope)

在函式和類之外的說明的識別符號具有檔案作用域,其作用域從說明點開始,在檔案結束處結束。

如果識別符號出現在標頭檔案的檔案作用域中,則它的作用域擴充套件到嵌入了這個標頭檔案的程式檔案中,直到該程式檔案結束。

鏈結具有塊作用域,函式作用域,函式原型作用域的變數都是無鏈結變數。這意味著這些變數屬於他們對應的塊,函式私有。

如何知道檔案作用域變數是內部鏈結還是外部鏈結,只要看外部定義中是否使用了儲存類別說明符static

int ok=1;  // 外部鏈結的檔案作用域

static ok=1;  // 內部鏈結的檔案作用域

int main()

...作用域和鏈結從不同層次描述了識別符號的可見性。而儲存期描述了通過這些識別符號訪問物件的生存期。

儲存期c語言分四種儲存期:靜態儲存期,執行緒儲存期,自動儲存期,動態分配儲存期。

2.執行緒儲存期:從被宣告到執行緒結束一直存在。

3.自動儲存期:塊作用域的物件不加static就具有自動儲存期。當程式進入這些變數的塊時,為這些變數分配記憶體,當退出這個塊時,釋放剛剛分配的記憶體,相當於把自動變數占用的記憶體當做乙個可以重複使用的工作區。

如果塊作用域物件加上static,那就具有靜態儲存期,從程式載入到程式結束期間都存在,但是作用域還是侷限在塊中。如果其他函式想要得到這個物件的值,可以讓原函式提供物件的位址,然後通過指標傳遞即可。

根據上述內容,變數可以分為下面幾種

記住:自動變數不會自動初始化。

2.暫存器變數:儲存在暫存器中,優點是速度快。

所謂靜態,就是指該變數在記憶體中位置不動,而不是說它的值不變(不是const)。而且因為具有靜態儲存期,所以當程式離開他們所在的函式後,變數並不會消失。

e.g.  

int a=1;

int main()

...5.外部鏈結的靜態變數:具有靜態儲存期,檔案作用域,和外部鏈結。也叫外部變數。為了指出該函式使用了外部變數,可以在函式中使用關鍵字extern再次宣告。如果乙個源**檔案使用的外部變數定義在另乙個源**檔案中,則必須使用extern在檔案中宣告該變數。

函式的儲存類別下次討論。

linux c儲存期 作用域 鏈結

儲存期 靜態儲存期分配的內存在程式執行期間一直存在 執行緒儲存期分配的記憶體從執行緒生成到執行緒結束之前一直存在 自動儲存期物件一般在塊裡面,當程式進入這個塊時分配記憶體,退出這個塊時就釋放記憶體 動態儲存期手動分配記憶體和釋放記憶體 malloc,calloc 檔案作用域 全域性 塊作用域可見範圍...

C 作用域 儲存期 鏈結

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

C語言 作用域 儲存期 鏈結

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