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 :

Question sur goto


Sujet :

C++

  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut Question sur goto
    On m'a dit que la fonction goto, est dangeureuse car elle brise la linéarité du code. D'une manière générale, il faut éviter la fonction goto, parce ce que s'il y en a trop, on ne peut plus comprendre le code.
    Alors que pensez vous de la fonction goto? Faut il l'éviter?
    Dans quel cas peut on l'utiliser?...

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    si tu poses la question, est-ce que tu as rencontré des cas où tu voudrais l'utiliser?

  3. #3
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    oui, plein de cas, le problème, c'est que c'est bien utile.
    Ce que je veux savoir, c'est dans quel cas on peut l'utiliser..

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    http://www.developpez.net/forums/showthread.php?t=75764

    Le goto c'est pour faire des pâtes non ?

  5. #5
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    c'est un peu le problème du goto, effectivement.

  6. #6
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    En fait, j'utilise la fonction goto dans un code de ce style:

    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
     
     
    Sub Fonction(...)
     
    Fonction=False
     
    If exp1=True then 
    Fonction=True
    Goto here
    end if 
     
    If exp2=True then 
    Fonction=True
    Goto here
    end if 
     
    If exp3=True then 
    Fonction=True
     
    end if 
     
    here
    End Fonction
    C'est pour éviter que s'il l'une des boucle if soit vrai, le programme se tape inutilement le teste des autres boucles if.

    Mais je pourrais faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Sub Fonction(...)
     
    Fonction=False
     
    If exp1=True or exp2=True or exp3=True then 
    Fonction=True
     
    end if 
     
     
    End Fonction
    Je ne sais pas quel code est le mieux, en terme de RAPIDITE, et pas de rigeur
    A vous de juger.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    qu'est ce qui te gène tellement dans la deuxième solution?

    tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    bool function()
    {
       return a || b || c;
    }
    et euh... on est en C++, tu peux faire des return au milieu du code si tu veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    bool function()
    {
      if( a )
      {
          return true;
      }
      else if( b )
      {
         return false;
      }
     // ...
    }
    Le langage te permet en tout cas de faire ça. Et généralement, il vaut mieux que le code soit clair plutôt que de trop l'optimiser à ce niveau.

  8. #8
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Par défaut
    En c++, l'évaluation des conditions est paresseuse, donc il est inutile de faire tous ces salamalecs avec le goto, si ta première expression est vraie alors la fonction retourne tout de suite. Le corollaire est qu'il faut éviter d'avoir des effets de bords dans tes expressions.

  9. #9
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    ouais pas bete,
    on met des return dans chaque boucle if, comme ca des qu'il rentre dans une boucle, il en ressort.

  10. #10
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    Mais est ce que "Return" en C++, fait quitté la fonction dans laquelle Return se trouve?

  11. #11
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    Encore heureux.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Salut,

    Le terme return sert, justement, à dire "quitte la fonction et renvoie telle valeur à la fonction appelante"...

    Donc, quand bien meme, tu aurais un niveau d'indentation énorme (ce qui est toujours à éviter pour une question de facilité de lecture), tu te retrouverais toujours... apres l'appel de la fonction dans la fonction appelante

    S'il est vrai que, d'une certaine manière, on peut etre attaché au principe "single in, single out" (entrée et sortie unique pour une fonction), c'est tres loin d'être justifié dans tous les cas et un return peut prendre place n'importe où

    Penses aussi, si tu travailles avec des valeurs entières, à utiliser les switch... case quand leur utilisation s'impose

    Si l'utilisation d'un goto *peut* dans certaines situations bien précises s'avérer être la meilleure solution, c'est, le plus souvent, dans des langages purement procéduraux ou qui, le plus souvent, ne fournissent pas de gestion d'erreur...

    Et, en tout état de cause, le goto ne devrait toujours être envisagé qu'en dernier ressort parce que les autres solutions ne sont *décidément et définitivement* pas adaptées...
    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

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

Discussions similaires

  1. question sur goto
    Par azräel dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/04/2009, 10h42
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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