goto or not to go

goto or not to go - C++ - Programmation

Marsh Posté le 13-08-2008 à 10:42:57    

Bonjour,
 
Je travaille avec visual C++ 2005 professionel
 
j'ai du code du genre
 
if ()
{
  if ()
  {
    if ()
    {
    }
    else
    {
    }
  }
  else
  {
  }
}
else
{
}
 
// Donc en gros plusieurs if then else imbriques
 
Et a un moment j'ai juste
if
{
  message_d_erreur;
  goto _END;
}
 
_END:
 
 
J'utilise jamais le Goto en fait
Mais là y en avait dans le code que j'utilise
Du coup pour les ca de sortie plutot que d'avoir trop de if imbriques, je fais juste un if et un goto _END; pour sortir et eviter un else
 
Sauf que comme ca se passe bien je passe pas dans le goto
et donc je vais dans le else ( qui nexiste pas )
sauf que au lieu de continuer apres le code, le programme va a l'etiquette
Y a t-il un goto implicite lorsque l'on n'ecrit pas explicitement la partie else ?
 
Car si j'ecris
if ()
{
 // code sans goto
}
suite du code
...
 
Je vais dans la suite du code
 
 
si j'ecris
if ()
{
 // code  
goto _END;
}
suite du code
...
 
Je vais a l'etiquette ( sans passer par le code du if bien entendu )
 
 
 
J'espere avoir ete clair sur ma question :p
 
 
 
 
 

Reply

Marsh Posté le 13-08-2008 à 10:42:57   

Reply

Marsh Posté le 13-08-2008 à 10:43:39    

try...catch ? [:petrus dei]

Reply

Marsh Posté le 13-08-2008 à 10:56:02    

try catch oui sans hésier v_v

Reply

Marsh Posté le 13-08-2008 à 11:00:12    

Et par rapport a la question ?
Mes tests ne generent pas d'exception pour le moment, enfin je pourrais en generer dans certains cas explicitement mais bon
C m'empechera pas d'avoir 10 000 inclusions, vu que dans le cas ou je veux sortir je suis oblige de faire un goto quand  

Reply

Marsh Posté le 13-08-2008 à 11:05:44    

cppisevil a écrit :

Et par rapport a la question ?
Mes tests ne generent pas d'exception pour le moment, enfin je pourrais en generer dans certains cas explicitement mais bon
C m'empechera pas d'avoir 10 000 inclusions, vu que dans le cas ou je veux sortir je suis oblige de faire un goto quand  


bah fais des exceptions. Le goto en C je ne dis pas non, mais en C++ avec les objets, c'est ingérable.

Reply

Marsh Posté le 13-08-2008 à 11:29:04    

cppisevil a écrit :

Et par rapport a la question ?


 
On est pile dans le sujet pourtant.
 

cppisevil a écrit :

Mes tests ne generent pas d'exception pour le moment


 
C'est le moment alors !  [:kurt haribo]  
 
Petit exemple juste pour illustrer :

Code :
  1. try {
  2.    // code
  3.    if ( erreur )
  4.       throw string("message d'erreur" );
  5.    // code
  6. } catch ( string & e ) {
  7.    std::cerr << e << std::endl;
  8. }
  9. // suite du code

Reply

Marsh Posté le 13-08-2008 à 11:34:59    

Ah non pitié de lance pas des string mais des vrais exceptions dérivant std::exception et en particulier de trucs genre std::runtime_error ou tout ce que contient <stdexcept> (google).

Reply

Marsh Posté le 13-08-2008 à 11:36:44    

Et on ne lance pas std::exception en mettant le type d'exception en message, merci :o
 

Spoiler :

Oui, il y en a qui m'enervent ....


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 13-08-2008 à 11:37:20    

Yup j'ai eu un coup de flemme, c'était plus pour illustrer qu'utiliser goto dans son cas était inutile et pourri qu'autre chose.

 

edit : cppisevil, tu trouveras plus d'infos ici : http://www.cplusplus.com/doc/tutorial/exceptions.html


Message édité par Elmoricq le 13-08-2008 à 11:40:29
Reply

Marsh Posté le 13-08-2008 à 11:51:01    

Le truc c'est qu'avec ça
en gros toute ma méthode et contenu dans un try catch
et ce qu'il y a dans le catch c'est ce que j'etais cense faire en allant au goto
 
c'est pas terrible de mettre une methode entiere dans un try catch
 
le but des goto
c'etait d'eviter d'avoir des if then else imbriquee pour la lisibilite du code
 
si je met un try catch a chaque test, ben ca m'avancera rien et n'aura pas plus dutilite que le if then else :)
 
Merci pour le lien (elmoricq)
 

Reply

Marsh Posté le 13-08-2008 à 11:51:01   

Reply

Marsh Posté le 13-08-2008 à 15:20:58    

sauf que goto dans un environnement objet, c'est la porte ouverte à l'arrachage de pied avec une kalashnikov.
 
Taz : mattes boost::exception dans la 1.36 ;)

Reply

Marsh Posté le 14-08-2008 à 11:18:13    

C'est très très chiant que ça dérive pas de boost::exception.
 
Dans le fond c'est bien boost, mais les packageurs des différents OS font chier:
- sous linux c'est globalement dispo, mais y en a beaucoup qui package boost en 36 modules, certains avec runtime d'autres pas
- sous windows on peut rêver
- sous les autres OS, y en a qui s'aggripe à leur gcc 2.95 et ça foire, du coup, écrire un programme de 1000 lignes qui nécessitent de compiler boost, ils aiment pas ...
 
D'ailleurs aujourd'hui, je ne connais pas de gros projets libres qui utilisent boost (je ne parle pas du piquage de code ça et là).

Reply

Marsh Posté le 14-08-2008 à 12:13:32    

libre je sais pas, mais bon toute la code base de Adobe est basé dessus. Moi perso, c'est boost dés que je peut.

Reply

Marsh Posté le 14-08-2008 à 12:16:16    

Taz a écrit :

D'ailleurs aujourd'hui, je ne connais pas de gros projets libres qui utilisent boost (je ne parle pas du piquage de code ça et là).


 
LyX est le plus gros projet libre que je connais qui utilise boost.

Reply

Marsh Posté le 14-08-2008 à 16:00:29    

Bah lyx ils doivent embarquer boost aussi


Message édité par Taz le 14-08-2008 à 16:01:06
Reply

Marsh Posté le 17-08-2008 à 00:02:25    

Taz a écrit :

- sous les autres OS, y en a qui s'aggripe à leur gcc 2.95 et ça foire, du coup, écrire un programme de 1000 lignes qui nécessitent de compiler boost, ils aiment pas ...


 
Tellement vrai. C'est particulièrement chiant sur des systèmes frustres genre des vieilles solaris :/
 

Citation :

D'ailleurs aujourd'hui, je ne connais pas de gros projets libres qui utilisent boost (je ne parle pas du piquage de code ça et là).


 
D'une certaine manière, qt4/kde s'en sert, vu que tout le système de build passe par cmake (qui nécessite quelques libs boost). A partir de là, builder qt sur de vieilles stations, c'est pas commode :/


---------------
Petit guide Kerberos pour l'administrateur pressé
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed