- 要進入文章之前,要先依序理解變數的宣告及定義 & 變數可視範圍及優先順序
> 變數的宣告及定義
以下都以整數型態做示範
- 註:「變數」可以多次宣告,但只能一次定義。
- 變數的宣告:
extern int num;
注意:int num; 並不是宣告,是定義。
- 變數的定義
ex1:int i;
ex2:int i = 1 (定義與初始化)
ex3:extern int i = 1 (定義+初始化)
> 變數的可視範圍
- 可視範圍:全域變數 > 區域變數 > 區塊變數
- 同名稱變數優先順序:區塊變數 > 區域變數 > 全域變數
- 全域變數:
在任何函數與類別之外所宣告,一般情況下作用域與生命週期是整個程式以及直到程式結束才終止。- 區域變數:
在函式之類所宣告的變數,作用域與生命週期只在函數之內,離開函數之外就消失。- 區塊變數:
在迴圈類型(while、for…)的區塊內所宣告,作用域及生命僅在迴圈之內,離開之後便消失。
> 關鍵字的使用
- extern (呼叫外部的全域變數)
使用在外部檔案(不須使用include引進)的全域變數,概念是在外部檔案A宣告並定義全域變數之後,在本地檔案B使使用extern再次宣告該變數為外部變數,來達到使用到外部變數。
例子一 :一般情況下 “extern” 宣告全域變數
//外部檔案A.h
int num = 3; //在外部檔案定義一個全域變數
//上述也可寫成以下方式:
//extern num = 3; //一般全域變數預設都是 extern宣告,所以省略不寫
//本地檔案B
//不需要include "A.h",若引進會發生重複定義的錯誤
extern int num; //extern所呼叫的外部變數,不可同時宣告+初始化,若需初始化則要分開執行
num = 10 //分開後初始化的外部變數
int main (){
std::cout << num << std::endl; //輸出10,若不在此文件中初始化為 10,則保持外部所儲存的值 3
}
例子二 :當要使用 “extern” 使用型態為 “const” 的外部全域變數的特殊情況