In C un modo tipico per semplificare la verifica degli errori ed evitare il deep nested if
è:
do
{
if (condition1) break;
/* 1. do something... */
if (condition2) break;
/* 2. do something else... */
if (condition3) break;
/* 3. do something else... */
} while(0);
/* Cleanup */
Ci sono varie opinioni su questo "idioma" (es. dai un'occhiata a Fai considera questa tecnica "BAD"? ).
Forse dovresti aggiungere un commento su do
per rendere chiaro a tutti cosa sta succedendo.
Spesso puoi riscrivere il codice usando una funzione di aiuto e cambiare il do-loop falso in:
void func(X *x, Y *y)
{
if (condition1) return;
/* 1. do something... */
if (condition2) return;
/* 2. do something else... */
if (condition3) return;
/* 3. do something else... */
}
/* ... */
X x;
Y y;
func(&x, &y);
/* Cleanup */
e non sarà considerato una "cattiva pratica" dal momento che è più prevedibile.
Se non hai i passaggi intermedi ( 1.
e 2.
) questo è probabilmente sufficiente:
int stop = condition1 || condition2 || condition3;
if (!stop)
{
/* ... */
}
/* Cleanup */