變數使用時的最小範疇原則
變數的作用範圍及生命週期
最小範疇原則
在 C/C++ 程式中每一個使用到的變數都要事先宣告,
變數的宣告和變數的使用愈靠近愈好
就是這裡所謂的最小範疇原則。
目的
但是 "變數的宣告和使用愈靠近愈好" 常常給人感覺其最主要的目的是
方便程式閱讀與維護
, 更深一層的意義是我們希望變數可以
被使用的範疇 (scope) 越小越好
,如此被
誤用
的情況可降到最低, 閱讀程式時使此變數對與它無關的程式碼的依存性到最低。
範例
你在閱讀某一列程式時所有在
作用範疇
中的變數都可能和此列程式有關, 因此減少這些變數, 可以減低閱讀及維護程式的困難度。
例如:
void main() { int i,j; float tmp; for(i=0; i<100: i++) { ....... for (j=0; j<10; j++) { tmp = sqrt(i*j+10); if (tmp < 2.54) { .... } } } }
void main() { ............ int i; for (i=0; ... { ....... int j; for (j=0..... { float tmp; tmp= } } }
注意:
C++ 中才允許不在區塊的最前端宣告變數
ANSI C 只允許在區塊的最前端宣告變數
void main() { int i; ....... for (i=0; .... { int j; ..... for (j=0..... { float tmp; ...... tmp=..... .... } } }
如果一定要宣告再一起的話可以再多加大刮號,如下例: 這多加的大刮號還可以避免在 for (j=0;...){} 迴圈後繼續使用變數 j。
for (i=0.... { { int j; for (j=0..... { ...... } } // the end of scope of variable j }
有時基於效率的考量,我們不會把變數宣告在迴圈之內, 那樣子的話每次進入迴圈都要多處理這個變數 (其實在 stack 上的變數無所謂, 除非你考慮到 C++ 中建構元執行的問題, 比較花時間的是用 malloc() 配置記憶體), 如上例可以宣告為
{ float tmp; for (j=0.... { } }
回
程式設計課程
首頁
by Pei-yih Ting
E-mail:
pyting@cs.ntou.edu.tw