Ca permet de separer le traitement des erreurs du code normal.
Dans cet exemple, c'est vrai qu'il n'y a qu'un seul truc a tester, donc ca ne fait pas grand effet.
Linux Torvald avait un post sur les mailing kernel expliquant pourquoi il preferait les goto dans certaines conditions (nottament la gestion des erreurs). J'arrive plus a retrouver l'URL mais il y a des trucs repris ici : http://linuxfr.org/2003/03/12/11606.html(...)
Personnellement je n'utilise pas le goto pour le traitement d'erreur car j'utilise les exceptions (du moins en C++ et Java). Mais j'avoue qu'en C, le seul moyen que je connaisse qui permette de se rapprocher du traitement d'erreur type "exception" est l'utilisation de goto.
Par exemple :
void f()
{
A a = doSomething1();
if (erreur)
goto destroyA;
[^] # Re: Découvrez la communauté PHP
Posté par Epsos . En réponse à la dépêche Découvrez la communauté PHP. Évalué à 3.
Dans cet exemple, c'est vrai qu'il n'y a qu'un seul truc a tester, donc ca ne fait pas grand effet.
Linux Torvald avait un post sur les mailing kernel expliquant pourquoi il preferait les goto dans certaines conditions (nottament la gestion des erreurs). J'arrive plus a retrouver l'URL mais il y a des trucs repris ici : http://linuxfr.org/2003/03/12/11606.html(...)
Personnellement je n'utilise pas le goto pour le traitement d'erreur car j'utilise les exceptions (du moins en C++ et Java). Mais j'avoue qu'en C, le seul moyen que je connaisse qui permette de se rapprocher du traitement d'erreur type "exception" est l'utilisation de goto.
Par exemple :
void f()
{
A a = doSomething1();
if (erreur)
goto destroyA;
B b = doSomething2();
if (erreur)
goto destroyB;
...
C c = doSomething3();
if (erreur)
goto destroyC;
return;
destroyC :
destroyC(c);
destroyB :
destroyB(b);
detroyA :
destroyA(a);
return;
}