鏈結屬性和儲存型別

2021-07-04 20:13:43 字數 754 閱讀 8702

全域性變數和函式具有external鏈結屬性,其餘識別符號的鏈結屬性則為none。

static關鍵字可以使鏈結屬性變為internal,而且static只對預設鏈結屬性為external的宣告才有改變鏈結屬性的效果。

有三個地方可以用於儲存變數:普通記憶體、執行時堆疊、硬體暫存器。

變數的預設儲存型別取決於它的宣告位置:

一:凡是在任何**塊之外宣告的變數總是儲存於靜態記憶體中,這類變數稱為靜態(static)變數。

二:在**塊內部宣告的變數的儲存型別是自動的(automatic),也就是儲存於堆疊中,稱為自動(auto)變數。

對於**塊內部宣告的變數,如果給它加上關鍵字static,可以使它的儲存型別從自動變為靜態。

修改變數的儲存型別並不修改該變數的作用域,仍然只能在該**塊內部按名字訪問。

函式的形式引數不能宣告為靜態,因為實參總是在堆疊中傳遞給函式,用於支援遞迴。

當用於函式定義或者用於**塊之外的變數宣告時,static關鍵字用於修改識別符號的鏈結屬性,從external改為internal,但識別符號的儲存型別和作用域不受影響。用這種方式宣告的函式或變數只能在宣告它們的原始檔中訪問。

當它用於**塊內部的變數宣告時,static關鍵字用於修改變數的儲存型別,從自動變數修改為靜態變數,但變數的鏈結屬性和作用域不受影響。用這種方式宣告的變數在程式執行之前建立,並在程式的整個執行期間一直存在,而不是每次在**塊開始執行時建立,在**塊執行完畢後銷毀。

C 作用域 鏈結屬性和儲存型別

變數在程式的某個部分宣告時,只能在程式的一定區域內才能訪問,這個區域就成為作用域。作用域分為四種 檔案作用域 函式作用域 塊作用域和原型作用域。編譯器通過變數宣告的位置來確定作用域 當變數在所有 塊之外宣告時就在檔案作用域中,檔案作用域的範圍是從變數宣告處一直到檔案的結束。但如果宣告在 h 檔案中,...

型別 儲存和變數

c 程式是一種型別宣告。型別是一種建立資料結構的模板,描述了該模板創造物件的特徵。型別由以下元素定義 型別模板建立的物件。資料成員 屬性 函式成員 執行 無需定義,c 自帶的型別 型別通過型別宣告建立,型別宣告包括資訊 宣告了型別就可以用了 使用堆和棧這兩個記憶體區域來儲存資料 棧是乙個記憶體陣列,...

儲存類 作用域 生命週期 鏈結屬性

補充 1 儲存類就是儲存型別,也就是描述c語言變數在何種地方儲存。2 記憶體有多種管理方法 棧 堆 資料段 bss段 text段 段 乙個變數的儲存類屬性就是描述這個變數儲存在何種記憶體段中。1 作用域是描述這個變數起作用的 範圍。2 基本來說,c語言變數的作用域規則是 塊作用域。1 生命週期是描述...