首先:乙個被說明的變數,除名字,型別和值的基本特性外,還有其他特性,包括儲存,作用域,可見性和連續等特性。
識別符號儲存特性確定了識別符號在記憶體中的生存時間和連續特性。
c++的乙個程式稱為乙個專案。乙個專案可以由多個檔案組成。識別符號的連續特性決定識別符號能否被工程中其他檔案引用。
c++中有兩種儲存特性,分別為:自動儲存,靜態儲存
1). 自動儲存(只有變數才具有的儲存特性)
自動儲存用關鍵字 auto 和 register 說明。這種變數在進入說明的塊時生成,在結束塊時刪除。
函式的引數和區域性變數都是自動儲存的。
auto:為變數預設的儲存型別,因此很少用
2).靜態儲存
關鍵字 extern 和 static 說明靜態儲存變數和函式識別符號。
如果這兩個關鍵字用於說明變數,程式在開始執行時就分配和初始化儲存空間;如果用於說明函式時,表示從程式執行開始就存在這個函式名。
儘管識別符號被說明為靜態時,程式一開始就存在,但不等於他們在整個程式中可用。
extern:全域性說明的識別符號預設為extern。
static:static說明的區域性變數只能在定義該變數的函式體中使用。與自動變數不同的是,static在第一次使用時進行初始化(預設初始值為0)。函式退出時,系統保持其儲存空間和數值。下次呼叫這個函式時,static變數還是上次退出時函式的值。
#include
#include
using namespace std;
int func()
int main(void)
程式執行結果:
auto a=1
static b=2
3auto a=1
static b=3 //可以看出,再次使用b的值時b的初始值為上次呼叫後的結果
4請按任意鍵繼續. . .
程式中常用的識別符號有變數、常量、函式、型別等命名符。
c++的識別符號有5種作用域:函式原型、塊、函式、類和檔案作用域。
1).函式原型作用域
只有函式原型形式參數列中使用的識別符號才具有函式原型的作用域。
2).塊作用域
塊是指在函式定義中由一對花括號相括的一段程式單元。乙個程式塊內允許巢狀巢狀另外乙個塊。在塊中說明的識別符號具有塊作用域,其作用域從說明點開始,直到結束塊的右括號處為止。
#include
#include
using namespace std;
int main(void)
//cout << sum << endl; 錯誤,未定義變數
system("pause");
return 0;
注:如果巢狀的內層塊與外層塊有同名的變數,則內層塊的內部變數將覆蓋外層的同名變數。作用域不同的變數,系統分配不同的儲存空間,它們的生存期也不同。
3).函式作用域
語句標號(後面帶冒號的識別符號)是唯一具有函式作用域的識別符號。語句標號一般用於switch結構中的case標號,以及goto語句轉向入口的語句標號。標號可以在函式體的任意位置,但不能在函式體外引用。
實際上函式體是乙個特殊的語句塊。
4).檔案作用域
任何在函式之外說明的識別符號都具有檔案作用域(注意,這裡是函式外)。這種識別符號從定義到檔案尾部任何乙個函式都可見。
5).全域性變數和區域性變數
具有檔案作用域的變數稱為全域性變數,具有塊作用域的變數稱為區域性變數。全域性變數說明時預設初始值為0.當區域性變數與全域性變數同名時,在塊內,全域性變數被遮蔽。要在塊中訪問全域性變數,可以用作用域運算子「::」
//在函式體內訪問全域性變數
#include
#include
using namespace std;
int x;
int main(void)
執行結果:
global variable x=0
local variable x=256
請按任意鍵繼續. . .
注:若是外層塊和內層塊有同名變數時,在內層塊中不可以通過作用域符號進行訪問外層變數。這是塊作用域變數與全域性變數不同的地方。
由上述可知,內層塊可以說明與外層塊同名的變數,函式可以通過非區域性變數返回運算結果。但將變數說明為全域性變數可能發生意料不到的***。有時,不需要訪問該變數的函式可能會意外修改了它,產生難以查詢的錯誤。
除非有特殊的要求,否則程式中不應該使用全域性變數。當函式的資料傳輸只使用引數而不需要全域性變數時,我們稱這個函式低耦合度的。低耦合度的程式模組便於除錯,便於重用。
C 識別符號的作用域
轉 包括 區域性作用域 全域性作用域 檔案作用域 函式作用域 函式原型作用域 名空間作用域 類作用域 注意 潛在作用域,也就是同名變數的作用域問題。1.區域性作用域 指在函式定義或者復合語句中,從識別符號的定義點開始到函式或者復合語句結束之間的程式段。在同乙個區域性作用域內不能出現相同名字的兩個區域...
識別符號的作用域,鏈結,儲存
2.識別符號的生存期 3.識別符號的儲存 4.extern的使用 翻譯單元 源 檔案.c 其所有標頭檔案.h 不細講 示例 int glogal 1 外部鏈結 全域性作用域 static int file 2 內部鏈結 檔案作用域 int main 識別符號的四大儲存期 具有靜態儲存期的變數在程式執...
識別符號的作用域
塊作用域 區域性作用域 檔案作用域 全域性作用域 函式原型作用域 函式作用域 類作用域 塊作用域 塊是函式中一對花括號 包括函式定義所使用的花括號 所括起的一段區域。在塊內說明的識別符號具有塊作用域,它開始於識別符號被說明的地方,並在標誌該塊結束的右花括號處結束。如果乙個塊內有乙個巢狀塊,並且該塊內...