Question

J'ai deux morceaux de code:

A faire en boucle:

do
{
    errorflag=0;
    ...
    if(cond1)
    {
        errorFlag=12;
        break;   // Error Conditions
    }
    .
    .            // Processing
    .
    if(cond2)  
    {
        errorflag=56;
        break;
    }
     .
     .

} while (0);

l'étiquette A:

errorflag=0;
if(cond1)
{
     errorflag=12;
     goto xy;
 .
 .
 .
 .
if(Cond2)
{
     errorflag=56;
     goto xy;
}
.
.
.

xy:

Quelle est la meilleure? S'il vous plaît me donner les détails pourquoi? ou est-il une meilleure façon de le faire? Nous optimisons le code. Nous sommes plus à la recherche dans ce genre de grandes boucles. niveau de l'Assemblée est, il n'y a pas beaucoup de place pour l'optimisation. S'il vous plaît fournir à vos entrées.

Je ne aime pas utiliser d'autre, si depuis, il est de nouveau en tête de vérifier une condition supplémentaire. Donc, sortir directement quand il y a un problème.

Je me sens après modifier ma question est logique

Merci à l'avance

Était-ce utile?

La solution

Le choix ici, sur la base de votre question, est do-while et goto.

Je vous recommande de choisir do-while.

Je vous déconseille d'utiliser goto. Cela vous mènera à des spaghettis code plus tard.

Vous pouvez avoir des alternatives comme if et if-else à venir avec le même résultat.

Dites non à goto

Autres conseils

Option 3:

void frobnicate(arguments) 
{
  if (cond1) return;
  if (cond2) return; 

  ...
}

frobnicate(the_arguments)

Choisissez un nom significatif, et le garder court.

Ils génèrent le même code (en supposant l'examen de la valeur du compilateur) de sorte que la différence est l'un qui est plus facile à comprendre et si le do / while interfère avec d'autres constructions en boucle qui sont sur le point. S'il y a une telle interférence, utilisez GOTO. Sinon, ne pas; ils sont moins claires (en général).

Et regardez attentivement pour voir si votre fonction est trop complexe et doit être refactorisé en plusieurs fonctions avec un but plus clair et plus simple flux de contrôle.

Sérieusement? Avez-vous jamais entendu parler de else?

if (cond1)
{
    //stuff
}
else if (cond2)
{
    // more stuff
}
// etc

else
{
    // default
}

Modifier

J'ai mal lu la question. Je vais laisser la vieille réponse ici parce que les commentaires ne font pas de sens otherwirse.

La bonne façon de code exactement comme par ce qui est dans la question est:

if (!cond1)
{
    .
    .
    .
    .
}

Dans les deux cas à la question, la partie if (cond2) n'a pas d'effet (en supposant cond2 n'a pas d'effets secondaires), car ils ont tous deux un saut à cause de la déclaration qui sera exécuté suivant de toute façon. C'est la raison pour laquelle je l'ai laissé sortir.

goto est le mal. Vous ne devez utiliser gotos quand il n'y a absolument pas d'autre façon de le faire. gotos peut conduire à code spaghetti imprévisible (difficile à lire, à comprendre, à déboguer, très sujet aux erreurs sur les phases de maintenance).

Je crois qu'une infinie en boucle avec des déclarations de break conditionnelles est encore mieux, bien qu'il soit plus lisible lorsque les conditions sont exprimées dans la déclaration de while.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top