Domanda

Ho due pezzi di codice:

Un ciclo Do While:

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

} while (0);

A goto etichetta:

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

xy:

Qual è la migliore? Vi prego di dare i dettagli perché? o c'è un modo migliore per fare questo? Stiamo ottimizzando il codice. Stiamo esaminando la maggior parte di questo tipo di grandi cicli. È assieme di primo livello, non c'è molto spazio per l'ottimizzazione. Si prega di fornire il loro inserimento.

Non mi piace usare il resto, se in quanto, è di nuovo un overhead di controllare una condizione più. Così uscire direttamente, quando c'è un problema.

Mi sento dopo questo modificare la mia domanda ha senso

Grazie in anticipo

È stato utile?

Soluzione

La scelta qui, base sulla vostra domanda, è do-while e goto.

vi consiglio di scegliere do-while.

I sconsiglio di utilizzare goto. Che vi condurrà agli spaghetti-code più tardi.

È possibile avere alternative come if e if-else a venire con lo stesso risultato.

dire di no a goto

Altri suggerimenti

Opzione 3:

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

  ...
}

frobnicate(the_arguments)

Scegliere un nome significativo, e di essere breve.

Generano lo stesso codice (supponendo che merita considerazione del compilatore) in modo che la differenza è uno dei quali è più facile da capire e se il fare / mentre interferisce con altri costrutti di loop che sono circa. Se non v'è tale interferenza, utilizzare goto. In caso contrario, non lo fanno; sono meno chiare (di solito).

E guardare con attenzione per vedere se la funzione è troppo complessa e deve essere riscritta in più funzioni con uno scopo più chiaro e semplice flusso di controllo.

Sul serio? Avete mai sentito parlare di else?

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

else
{
    // default
}

Modifica

ho letto male la domanda. Ho intenzione di lasciare il vecchio risposta qui, però, perché i commenti che non hanno senso otherwirse.

Il modo corretto di codice esattamente come per ciò che è nella domanda è:

if (!cond1)
{
    .
    .
    .
    .
}

In entrambi i casi in questione, la parte if (cond2) non ha alcun effetto (supponendo cond2 non ha effetti collaterali) perché entrambi causare un salto alla dichiarazione che dovrebbe essere eseguito il prossimo in ogni caso. È per questo che ho lasciato fuori.

goto è il male. Si dovrebbe utilizzare solo gotos quando non c'è assolutamente nessun altro modo per farlo. gotos possono portare a spaghetti code imprevedibile (difficile da leggere, da capire, eseguire il debug, molto incline a errori in fasi di manutenzione).

Credo che un infinito ciclo while con istruzioni condizionali break è ancora meglio, anche se è più leggibile quando le condizioni sono espresse nella dichiarazione while.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top