IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Vous utilisez le goto dans certains cas ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par défaut Vous utilisez le goto dans certains cas ?
    Bonjour je mets une fonction, dite moi laquelle vous préférez. (Ceci est tiré du livre Métier développeur : Kit de survie)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    int maFonction(const char * filename, int taille)
    {
      FILE * fp = fopen(filename, "rb");
      if(fp == 0)
      {
         printf("file not found");
         return ERR1;
      }
     
      char * buffer = new char[taille];
      if(buffer == 0)
      {
         fclose(fp);
         printf("out of memory");
         return ERR2;
      }
     
      int read = fread(buffer, 1, taille, fp);
      if(read != taille)
      {
         delete []buffer;
         fclose(fp);
         printf("read error");
         return ERR3;
      }
     
      delete []buffer;
      fclose(fp);
      return 0;
    }

    Voici la deuxième fonction écrite différemment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    int maFonction(const char * filename, int taille)
    {
      int err=0;
      char * buffer = 0;
      FILE * fp = fopen(filename, "rb");
      if(fp == 0) { err=ERR1; goto Exit; }
     
      buffer = new char[taille];
      if(buffer == 0) { err=ERR2; goto Exit; }
     
      int read = fread(buffer, 1, taille, fp);
      if(read != taille) { err=ERR3; goto Exit; }
     
     Exit:
      if (buffer!=0) delete []buffer;
      if (fp!=0) fclose(fp);
      if(err !=0) printf("Error %d", err); 
     return err;
    }
    J'aimerais donc avoir vos avis sur les 2 et si l'utilisation de goto est utile et si oui dans quel cas.

    Merci d'avance.


    PS: je sais il y a du C avec du C++, mais ce code n'est pas de moi.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est du pur C, ton truc, y'a pas de C++ dedans - à part le new et le delete -. Avec le C++,on a encore moins besoin du goto grâce à la sémantique par objet, donc perso, jamais.

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    que ce soit en C ou en C++ je n'ai jamais utilisé de goto.

    De plus, vu que tu ne sais pas d'où tu viens, t'es obligé de refaire des tests, donc en l'occurence, ton goto n'apporte rien.

    Enfin, je ne suis pas un expert, mais je dirais que faire des goto peut poser des problèmes d'accès à la mémoire, comme dans le cas des try catch, mais en pire.

    Donc non seulement c'est sale mais en plus souvent dangereux.. Mais encore une fois ce n'est que mon avis

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Je n'ai jamais mis un seul goto dans n'importe quel programme (meme pas en COBOL)...

    Il faut dire que j'ai eu un prof qui nous menaçait (et qui l'aurait fait, j'en suis encore persuadé) de nous jeter par la fenetre si on utilisait goto
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    En C++ il y a notamment l'idiome RAII qui permet de se passer de la plupart des gotos.

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Sylvain Togni
    En C++ il y a notamment l'idiome RAII qui permet de se passer de la plupart des gotos.
    Meme sans passer par l'idiome RAII, il y a parfaitement moyen de se passer des goto...

    Le tout, c'est de mettre au point la bonne logique... Et peut etre d'utiliser la bonne technique de mise au point d'algorithmes...

    J'en parle dans un autre sujet, mais, il est clair que si l'on crée l'algorithme en utilisant le flowchart, la tentation d'utiliser des goto sera bien plus importante...

    Par contre, d'autres techniques (le nassichneiderman en tete) permettent de purement et simplement ignorer l'existence de cette commande "honnie"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    La seule utilité c'est pour combler l'absence d'un break n.

  8. #8
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par loufoque
    La seule utilité c'est pour combler l'absence d'un break n.
    Et encore, dans le cadre d'une boucle, il y a souvent moyen, en la concevant différemment, de ne pas avoir besoin d'un break...

    A titre tout à fait personnel, je n'utilise d'ailleurs le break que dans le cadre des switch ...case ... Mais on entre dans un autre débat
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    je n'utilise d'ailleurs le break que dans le cadre des switch ...case
    +1
    et jamais de return en mileu de procedure.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pb de son dans certains cas
    Par loki dans le forum Matériel
    Réponses: 1
    Dernier message: 30/01/2007, 11h39
  2. Empecher la validation dans certains cas ?
    Par elitost dans le forum Struts 1
    Réponses: 2
    Dernier message: 19/09/2006, 13h03
  3. Passer la validation Javascript dans certains cas
    Par tkino dans le forum Struts 1
    Réponses: 2
    Dernier message: 31/07/2006, 15h37
  4. [JOINTURES] interêt dans certain cas
    Par nicotine002 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/06/2006, 17h22
  5. [POO] Modèle objet: this inutilisable dans certains cas?
    Par vlord dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 13/08/2005, 10h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo