Pregunta

Tengo dos piezas de código:

A hacer mientras bucle:

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

} while (0);

A Goto etiqueta:

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

xy:

¿Cuál es mejor? Por favor, dame los detalles por qué? o hay alguna forma mejor de hacer esto? Estamos optimizando el código. Estamos investigando más este tipo de grandes bucles. montaje está nivelada, no hay mucho margen para la optimización. Por favor envíe sus entradas.

No me gusta usar otra cosa, si ya, es de nuevo una sobrecarga de comprobar una condición más. Así que salir directamente cuando hay un problema.

Me siento después de esta edición de mi pregunta tiene sentido

Gracias de antemano

¿Fue útil?

Solución

La elección aquí, base en su pregunta, es do-while y goto.

Le recomiendo que elija do-while.

desanimo que utilice goto. Que le llevará a los espaguetis de código más adelante.

Puede tener alternativas como if y if-else para llegar a los mismos resultados.

Diga no a goto

Otros consejos

Opción 3:

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

  ...
}

frobnicate(the_arguments)

Escoja un nombre significativo, y que sea breve.

Generan el mismo código (suponiendo consideración el valor del compilador) por lo que la diferencia es uno de los cuales es más fácil de entender y si el do / while interfiere con otras construcciones de bucle que están a punto. Si hay tal interferencia, usar GOTOS. De lo contrario no lo hacen; que son menos claros (por lo general).

Y mira con cuidado para ver si su función es excesivamente compleja y debe ser reprogramado para múltiples funciones con un propósito claro y sencillo flujo de control.

En serio? ¿Nunca has oído hablar de else?

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

else
{
    // default
}

Editar

leí mal la pregunta. Voy a dejar la vieja respuesta aquí, sin embargo, porque los comentarios no tienen sentido otherwirse.

La forma correcta de código exactamente de acuerdo a lo que está en la pregunta es:

if (!cond1)
{
    .
    .
    .
    .
}

En ambos casos en la pregunta, la parte if (cond2) no tiene ningún efecto (asumiendo COND2 no tiene efectos secundarios), ya que a la vez causa un salto a la afirmación de que sería ejecutado al lado de todos modos. Es por eso que lo dejó fuera.

goto es malo. Sólo debe utilizar gotos cuando no hay absolutamente ninguna otra manera de hacer esto. gotos pueden llevar a código espagueti impredecible (difícil de leer, de entender, de depurar, muy propenso a errores en las fases de mantenimiento).

Creo que un bucle while con declaraciones condicionales break es aún mejor, aunque es más fácil de leer cuando las condiciones se expresan en la declaración while.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top