begin process at 2012 02 07 09:12:01
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

.Net

 > SUPER GOTO

SUPER GOTO


 Information sur la source

Note :
1 / 10 - par 1 personne
1,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :.Net Niveau :Débutant Date de création :20/06/2003 Date de mise à jour :20/06/2003 10:20:48 Vu :2 216

Auteur : JCDjcd

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note


 Description

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

  • #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' !
#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' !



 Sources du même auteur

Source avec Zip Source avec une capture COLORATION SYNTAXIQUE
Source avec Zip Source avec une capture ORBITES DES SATELLITES GPS
Source avec Zip Source avec une capture DESSIN D'ARBRES
Source avec Zip Source avec une capture PROGRAMMATION LINEAIRE
Source avec Zip EXTENSION DE CORPS (MATH)

 Sources de la même categorie

Source avec Zip Source avec une capture ANALYSEUR LEXICAL par Donald180v
Source avec Zip Source avec une capture MAP_MAKER_JEU par seekplus
Source avec Zip Source avec une capture Source .NET (Dotnet) EMISSION D'UN OCTET SUR LE PORT SÉRIE - CLASSE SERIALPORT par jmchatelet01
Source avec Zip Source .NET (Dotnet) RESOLV EQU DE DEGRES N par darckangel731
Source avec Zip Source avec une capture Source .NET (Dotnet) INTEROP XCHAT / .NET : CHARGEUR DE PLUGINS MANAGÉS par TeBeCo

Commentaires et avis

Commentaire de GoldenEye le 20/06/2003 11:23:28

try catch c'est mieux

Commentaire de JediMaster le 20/06/2003 21:10:12

j'comprend pas ou est le Hyper GOTO je vois meme pas un pas Hyper GOTO alors...

Commentaire de Nebula le 15/07/2003 10:16:33

Mouais, on vit très bien sans, même si c'est assez utile, c'est assez confus quand même...

GoldenEye &gt; des try/catch en C ? mais bien sur...

Commentaire de kikioumy le 24/03/2004 15:08:23

Super! Merci pour la syntaxe!

Commentaire de GoldenEye le 24/03/2004 15:48:43

Nebula =&gt; je me suis fié à la catégorie dans laquelle le source a été posté

Commentaire de magic_Nono le 30/07/2004 10:29:37

en clair, C du try catch

Bien pr ces fonctions que l'on ne connaissais pas...

qu : est-ce du standard C?

cela permetra les try ds du C pur...


Ceci dit : voici le commentaire des MSDN :

Do not use setjmp and longjmp in C++ programs; these functions do not support C++ object semantics. Also, using these functions in C++ programs may degrade performance by preventing optimization on local variables. Use the C++ exception handling try/catch constructs instead.


If you do use setjmp/longjmp in a C++ program, the interaction between these functions and C++ exception handling requires that you include SETJMP.H or SETJMPEX.H. Destructors for local objects will be called during the stack unwind if you compile with the /GX (Enable Exception Handling) option. Also, if you intend your code to be portable, do not rely on correct destruction of frame-based objects when executing a nonlocal goto using a call to longjmp.


C dc qd mm a éviter...
++
Magicalement,
Nono.

Commentaire de JCDjcd le 30/07/2004 15:13:01

Ho mais pas du tout, comment je ne fais pas du C++, mais tu C, cela n'est pas a eviter, au contraire, c'est grandement utile danc des cas. (par exemple gestion des erreurs)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,730 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales