2012-11-01 93 views
5

我試着去弄清楚初始化某些變量時,什麼是最好的做法... 我的代碼看起來像這樣的時刻:環路初始化變量

int nHexCount = 0; 
int prevState = sc.state; 

bool bOnlySpaces = true; 
bool bIsValidLabel = true; 
bool bIsHotstring = false; 
bool bIsValidName = true; 
bool bIsValidExpStart = false;       

bool fInExpression = false; 
bool fInStringBlock = (sc.state == SCE_AHKL_STRINGOPTS || sc.state == SCE_AHKL_STRINGBLOCK); 

for (; sc.More(); sc.Forward()) { 

    if (sc.atLineStart) { 
     if (!fInStringBlock && sc.state != SCE_AHKL_COMMENTBLOCK) 
      sc.SetState(SCE_AHKL_DEFAULT); 

     // Reset Status 
     prevState = sc.state; 

     bOnlySpaces = true; 
     bIsValidLabel = true; 
     bIsHotstring = false; 
     bIsValidName = true; 
     bIsValidExpStart = false; 

     fInExpression = false; 
    } 

... 

因此,大家可以看到大部分這些變量我的每一個程序發現在編輯組件我工作的一個新的生產線時...復位

的問題是:

它是良好的編程習慣聲明和初始化所有這些變量在for循環中,還是應該像現在一樣離開它?

+2

這取決於:你需要他們的福爾循環的範圍之內? – alestanis

回答

10

您應該儘可能減少變量的範圍。這將改善代碼的可維護性,並減少錯誤的發生。

// bad 
int i, j, k; 
k = 0; 
for (i = 0; i < X, ++i) 
{ 
    j = foo(i); 
    k += j; 
} 

bar(k); 

... ... VS

// better 
int k=0; // needs scope outside loop 
for (int i = 0; i < X, ++i) 
{ 
    int j = foo(i); 
    k += j; 
} 

bar(k); 
+1

通過這種方式表現如何?每次都不是昂貴的初始化它嗎? – sashkello

+3

@sashkello:對於基元:沒有。對於更復雜的東西:可能不是。 –

+0

因爲這個原因,我已經避免了自己改變它們。那是否有任何開銷? - 編輯只是閱讀上面的答案。 – RaptorX