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 :

LE cas o� le GOTO est n�cessaire ?


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2016
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 29
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2016
    Messages : 3
    Par d�faut LE cas o� le GOTO est n�cessaire ?
    bonjour
    Je fais du c++ depuis d�j� un moment je suis tomb� sur un os pour un projet (un drone autonome):
    quand je communique avec mon module wifi, je n'ai pas besoin de paralyser tout le programme pour attendre sa r�ponse

    donc dans ma fonction de mise_a_jour, j'envoie un message et je repart dans la boucle stabiliser mon drone

    mais, quand je re�ois la r�ponse, il faut que je reprenne l� ou je me suis arr�t� dans mise_a_jour.... �a ressemble beaucoup � un GOTO !!!

    mais on m'a toujours dit de ne jamais utiliser de goto pour des raisons �videntes, auriez vous une solution pour les remplacer ?

    ps1 : mon programme doit �tre tr�s rapide, je suis sur un ARM donc pas de switch avec un case pas ligne...
    ps2 : ce code n'est clairement pas fonctionnel, c'est juste pour vous donner une id�e du probl�me, il faut que je revoie le type de emplacement_actuel


    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    void loop() 
    {
      //plein d'instructions
     
      wifi.loop();
    }
     
    class wifi
    {
      public:
        void loop();
     
      private:
        void reception();
        void mise_a_jours();
        String emplacement_actuel;
    };
     
    void wifi::loop();
    {
      if (attente de réponse ) reception();
     
      else mise_a_jours();
    }
     
    void wifi::reception()
    {
      if( la réponse n'est pas arrivée )
      {
        return(0);
      }
      else
      {
        goto(emplacement_actuel);
      }
    }
     
    void wifi::mise_a_jours()
    {
      emplacement_actuel = "flag1:"
      write_serie("hey");
      return
      flag1:
      emplacement_actuel = "flag2:"
      write_serie("ho");
      return
      flag2:
      emplacement_actuel = "flag3:"
      write_serie("hey");
      return
      flag3:
    }
    Vous pouvez ragez sur le goto mais si vous avez mieux, je prend !

  2. #2
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Et pourtant, switch serait le plus efficace.
    Il faut bien r�aliser que switch, break, continue, et m�me l'accolade fermante d'une boucle, sont compil�s par un goto.

    Le probl�me principal d'un goto, c'est qu'on peut faire n'importe quoi avec, et que c'est vraiment difficile de s'en apercevoir.

    Utilise une enum plutot que des strings.
    tu pourrais avoir des pointeurs de fonctions membres.

    D'une mani�re g�n�rale, la performance s'am�liore apr�s mesure, jamais avant.

  3. #3
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Et �a marche �a ?!?
    Parce que goto, il attend un label, et �a n'a strictement rien � voir avec une string. Donc ton code, j'ai surtout bien envie de dire qu'il ne marche pas du tout.
    Ce que tu veux faire c'est une b�te machine � �tat, un enum, un switch, chaque case est un �tat.
    Quant � la rapidite.. un switch case c'est (le plus souvent?) une table et un jump, donc instant, la comparaison de string par contre..
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  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
    Salut,

    Je code depuis ... oufff, un s�rieux bail maintenant, dans diff�rents langages de programmation, m�me si je me suis peu � peu sp�cialis� en C++ et je peux t'assurer que je n'ai jamais �t� dans une situation dans laquelle le recours � un goto pouvait s'av�rer n�cessaire.

    Je suis donc tout � fait de l'avis de mes coll�gues : une �num�ration et un swich... case semble beaucoup plus adapt�, et sera -- quoi qu'il en soit -- toujours plus s�curisant qu'un goto qui risque de transformer ton code en un immonde plat de spagettis (et qui, de plus, risque de te faire faire n'importe quoi).
    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
    Candidat au Club
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2016
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 29
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2016
    Messages : 3
    Par d�faut
    Merci beaucoup

    Zut, je pensait avoir trouv� le 1% o� le goto �tait appropri� ...

    merci de vos r�ponse rapide, je pense que je vais utiliser un enum avec toutes mes fonctions (en pointeurs) et avancer en incr�mentant l'indice, vous en pensez quoi ?
    Mais ca risque de prendre pas mal de place m�moire et beaucoup de temps d�appel de fonctions non ?

  6. #6
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Citation Envoy� par 4r19415 Voir le message
    bonjour
    donc dans ma fonction de mise_a_jour, j'envoie un message et je repart dans la boucle stabiliser mon drone

    mais, quand je re�ois la r�ponse, il faut que je reprenne l� ou je me suis arr�t� dans mise_a_jour.... �a ressemble beaucoup � un GOTO !!!
    Ca ressemble surtout beaucoup � une coroutine. Ce n'est pas (encore) support� directement par le langage, mais des impl�mentations � base de biblioth�ques existent.
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  7. #7
    Responsable Syst�mes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Ao�t 2011
    Messages
    18 270
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Gestion de parcs informatique
    Secteur : High Tech - Mat�riel informatique

    Informations forums :
    Inscription : Ao�t 2011
    Messages : 18 270
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  8. #8
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Tu peux aussi regarder du cot� du pattern "�tat" ("state").
    C'est assez pr�cis�ment ce que tu veux faire.

    Il y a plusieurs variantes d'impl�mentations

  9. #9
    Membre exp�riment� Avatar de RPGamer
    Homme Profil pro
    Ing�nieur en syst�mes embarqu�s
    Inscrit en
    Mars 2010
    Messages
    168
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing�nieur en syst�mes embarqu�s

    Informations forums :
    Inscription : Mars 2010
    Messages : 168
    Par d�faut
    Comme le disais leternel, goto est historiquement li� au fait qu'il s'agit d'une traduction direct d'un "jump" en langage assembleur, en tout cas dans le concept. A l'origine, on pouvait encore beaucoup programmer en assembleur et cette fa�on de penser les programmes par des sauts directs ou des sauts conditionnels � une adresse (ou un label) �tait tr�s r�pandue. Instaurer une instruction goto dans les langages haut niveau comme C ou BASIC �tait alors naturel.

    Les structures de langage qui ont �t� offertes par la suite on rendu cette mani�re de penser totalement caduc pour un programmeur "haut niveau". C'est du reste l'int�r�t principal de ces langages, pouvoir remplacer des jump et des instructions logiques par des boucles for.

  10. #10
    Candidat au Club
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2016
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 29
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2016
    Messages : 3
    Par d�faut
    Meri de toutes vos r�ponses,
    je crois que j'ai assez d��l�ment pour m'en sortir maintenant, j'uploaderais la solution quand j'aurais quelque chose de propre

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Pourquoi "goto" est d�conseill� ?
    Par Melchisedec dans le forum D�buter
    R�ponses: 20
    Dernier message: 30/05/2020, 16h24
  2. Recordset seek : cas ou rien n'est trouv�
    Par Frog74 dans le forum VBA Access
    R�ponses: 1
    Dernier message: 05/05/2008, 10h34
  3. ne recompiler que ce qui est n�cessaire
    Par Lango dans le forum ANT
    R�ponses: 1
    Dernier message: 12/10/2007, 18h02
  4. Traiter le cas ou ma date est nulle
    Par polianita dans le forum Access
    R�ponses: 3
    Dernier message: 28/07/2006, 15h44
  5. R�ponses: 3
    Dernier message: 19/06/2006, 14h25

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