- 註冊時間
- 2006-10-8
- 最後登錄
- 2019-6-20
- 主題
- 查看
- 積分
- 1306
- 閱讀權限
- 110
- 文章
- 1392
- 相冊
- 0
- 日誌
- 1
   
狀態︰
離線
|
在函數之外 宣告或定義 的變數都是 全域變數。全域變數 於程式編譯 之後就 存在一直到 程式的結束才消失,其使用範圍 為 自檔案的宣告或定義處 開始 至檔案的 結束,其名稱於 一個檔案 也必須是 唯一的。
全域變數的使用,其好處是 減少函數呼叫的 引數個數,其壞處是程式 較不易維修、除錯。
註:函數的呼叫其 side-effect (副作用)愈少愈好,即函數的呼叫 會改變 函數外 變數的值。將於例 3 說明。
如果 區域變數 與 全域變數 同名,則 全域變數 的使用範圍就不包含區域變數 的 使用範圍。
於例 3 將說明 全域變數 的上述性質。
例 3. 全域變數的使用範圍。
1. int s=0;
2. int square(int i)
3. { s=i+1; printf("s=%d,i=%d\n",s,i);
4. return i*i;
5. }
6. int t=1;
7. main()
8. { int s=10;
9. t=square(s);
10. printf("s=%d,t=%d\n",s,t);
11. }
說明:
例 3 含 2 個全域變數 s1及 t6, s1的使用範圍為整個檔案扣去第 7 行至第 11 行,因 main() 有區域變數 s8。
於第 9 行,呼叫函數 square,傳 10 出去,傳 100 回來給變數 t。
呼叫函數 square 的過程中,有一 side-effect(副作用) 即改變了全域變數 s1 的值,因此, square 的語意並不僅含將引數 i 平方而已, 此函數已不能形成一 獨立的模組, 因此, 維修變得 較難, 同時 程式也 較不易 讓人看懂。
程式執行的結果為
s=11,i=10
s=10,t=100
|
|