2012-11-01 6 views
5

Im essayant de comprendre ce qui est la meilleure pratique lors de l'initialisation de certaines variables ... Mon code ressemble à ceci au moment:variables dans la boucle Initialiser

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

... 

Comme vous pouvez le voir la plupart de ces variables sont remis à zéro à chaque fois que mon programme trouve une nouvelle ligne dans le composant d'édition je travaille sur ...

la question serait:

Est-il une meilleure pratique de la programmation et l'initialisation de toutes les déclarer ces variables à l'intérieur de la boucle for ou devrais-je le laisser comme il est en ce moment?

+2

Cela dépend: avez-vous besoin en dehors de la portée de la boucle de Foor? – alestanis

Répondre

10

Vous devez toujours réduire autant que possible la portée des variables. Cela améliorera la maintenabilité de votre code et réduira le risque de bogues.

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

Qu'en est-il de la performance par le chemin ..? Ne sera-t-il pas coûteux de l'initialiser à chaque fois? – sashkello

+3

@sashkello: Pour les primitives: non. Pour des choses plus complexes: probablement pas. –

+0

Je me suis abstenu de les changer exactement à cause de cette raison. Y a-t-il des frais généraux à cause de cela? - EDIT viens de lire la réponse ci-dessus. – RaptorX

Questions connexes