2012-11-01 19 views
5

Im cercando di capire che cosa è la migliore pratica durante l'inizializzazione alcune variabili ... Il mio codice simile a questo al momento:inizializzazione variabile nel ciclo

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; 
    } 

... 

Quindi, come potete vedere la maggior parte di queste variabili vengono ripristinate ogni volta che il mio programma trova una nuova linea nel componente di modifica sto lavorando su ...

la domanda sarebbe:

è meglio pratica di programmazione dichiarare e inizializzare tutte quelle variabili all'interno del ciclo for o dovrei lasciarlo come è al momento?

+2

Dipende: si fa a bisogno di fuori del campo di applicazione del ciclo foor? – alestanis

risposta

10

È consigliabile ridurre il più possibile l'ambito delle variabili. Ciò migliorerà la manutenibilità del tuo codice e ridurrà la possibilità di bug.

// 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

E per quanto riguarda le prestazioni, a proposito ...? Non sarà costoso inizializzarlo ogni volta? – sashkello

+3

@sashkello: per le primitive: no. Per cose più complesse: probabilmente no. –

+0

Mi sono astenuto dal modificarli esattamente per questo motivo. C'è un sovraccarico a causa di ciò? - EDIT basta leggere la risposta sopra. – RaptorX

Problemi correlati