10 儲存類 作用域和編譯預處理

2022-08-23 18:24:13 字數 1364 閱讀 6307

資料型別確定變數所需儲存單元的大小,儲存類別確定變數在記憶體中的儲存位置,從而確定其作用域和生存週期。

在c語言中,儲存類別可以分為自動類和靜態類兩種。

區域性變數既可以說明成自動類,也可以說明成靜態類;全域性變數只能是靜態類。

auto(自動的)。

register(暫存器的)。

static(靜態的)。

extern(外部的)。

在函式內部或復合語句內部定義的變數,函式的行參也屬於區域性變數。

說明:

全域性變數時在函式外部任意位置上定義的變數,它的作用域時從定義點到整個原始檔結束。

全域性變數只有static一種類別,放在靜態儲存區。

當定義全域性變數時,若加上static關鍵字說明,則其作用域僅限於本編譯單位(本檔案)。

static對區域性變數和全域性變數的作用效果不同 -

對區域性變數:作用域沒變,儲存類該為靜態;

編譯預處理就是在編譯前,由編譯預處理程式按照編譯預處理命令列的指示對源程式進行處理,c有三類預處理:

巨集定義;

檔案包含;

條件編譯;

凡是以#開頭的行,都稱為編譯預處理命令列。

編譯預處理命令列可以根據需要出現在程式的任何一行的開始位置,其作用一直持續到檔案末尾。

編譯預處理命令列不是c語句,行末不需加分號。

終止巨集定義

#undef 巨集名

#include 「檔名」

#include 《檔名》

說明:

一般情況下,源程式中的所有行都參加編譯過程。但有時會希望其中一部分在滿足一定的條件時才進行編譯。

形式一
#ifdef 識別符號 /*如果識別符號被定義,則編譯1,否則編譯2 */

程式段1;

#else

程式段2;

#endif

形式二

#inndef 識別符號 /* 若果識別符號沒有被定義,則編譯1,否則編譯2 */

程式段1;

#else

程式段2;

#endif

形式三

#if 表示式 /* 當表示式為真時,則編譯1,否則編譯2 */

程式段1;

#else

程式段2;

#endif

儲存類和作用域規則

c語言的儲存類分為四種,它們是 auto 自動的,extern 外部的,static 靜態的,register 暫存器的。分程式是由一對花括號擴起來的一段程式,乙個函式就是乙個分程式,乙個復合語句也是乙個分程式。c語言中分程式結構允許並列或巢狀。函式可以看成是最外一層並列的分程式,只是它被命名,並可...

全域性預處理與執行,作用域與作用域鏈

一.全域性預處理 全域性預處理 首先會建立乙個詞法環境 lexical environment 然後掃面全域性裡用var宣告的變數和 用宣告的方式建立的函式即function 函式表示式即var q function 掃瞄後把變數存入寫成 a undefined 把函式寫成 指向函式或對函式的乙個引...

儲存時間和作用域

自動儲存時間 靜態儲存時間 動態儲存時間 1 自動變數 在一對大括號的範圍內宣告的變數,稱為自動變數,具有區域性作用域,乙個自動變數在 作用域 中的時間從宣告他的那一刻開始,一直到包含器宣告的 塊結束為止。由棧記憶體自動分配。棧預設的容量是1mb.自動變數 出生 於他被定義之時,占用的空間在棧上分配...