Super goto

Contenu du snippet

On dit souvent que fair des goto ce n'est pas bien ...
Mais il y a un goto assez special qui lui est tout a fait acceptable, et qui est HYPER utile pour par exemple les getions d'erreur !

Voici un exemple de ce que j'appelle un SUPER GOTO (magnifique).

Source / Exemple :


#include <stdio.h>
#include <conio.h>
#include <setjmp.h>
// --------------------------------------------
void FunctionWhereError(jmp_buf jumpIfError)
{
// ici une fonction avec si vous voulez plein de calcul
// met on va dire qu l'on a fait une division par 0
// on retourne (pourquoi pas 154)
longjmp(jumpIfError,154);
}
// --------------------------------------------
int main(int argc,char **argv)
{
jmp_buf jump;
int     r;

if(!(r = setjmp(jump)))
  {
  printf("Ici on est dans le bloc 'TRUE' du 'if'\n");
  // on appelune fonction ou il y a une erreur
  FunctionWhereError(jump);
  }
else
  {
  printf("Ici on est dans le bloc 'FALSE' du 'if'\n");
  printf("Le 'setjump' a retourner le code %d\n",r);
  }

printf("N'est-ce pas merveilleux ?\n");
getch();
return 0;
}
// le premier fois le 'setjmp' initialise 'jump' et retourne 0
// Il enregistre ou il en est dans le programme
// Donc lorque l'on fait 'longjmp', il va dans la structure
// 'jumpIfError' ou il y a toutes les donnees enregistrees
// il va donc au 'setjmp' et retourne son second paramtre 154
// donc on tombe sur le 'else' !

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.