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 :

les goto et label en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Par défaut les goto et label en C
    Bonjour,


    je me baladais et j'ai trouvé ca :

    etiq2: ... /* des instructions */

    goto etiq1; /* goto avant définition de l'étiquette */

    ... /* des instructions */

    etiq1: ... /* des instructions */

    goto etiq2; /* goto après définition de l'étiquette */


    en language C.

    je croyais que c'étais qu'en basic les goto et lbl, (je suis novice en C), mais bon...

    et donc, je me demandais, comme en C il faut toujours tout annoncer, comment annoncer un label par exemple?

    une ame charitable pourrait ecrir un morceau de C pour voir comment l'insérer?


    merci =)

  2. #2
    Membre émérite
    Avatar de f-k-z
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2006
    Messages : 403
    Par défaut
    Yop,
    oui les goto ca existe en C mais c'est vraiment très sale d'en utiliser. Si tu peux t'en passer, passes-en toi.


    Cordialement,

    F-k-z

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Les goto, c'est le meilleur moyen de faire du code illisible, mal structuré et indebuggable. Un programme C bien structuré n'a pas besoin de goto.

    Le mieux : n'utilise pas de goto en C.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Par défaut
    c'est noté

    merci =)

    et pour culture g, qq1 me montrerai comment annoncer un lbl?

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 965
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 965
    Par défaut
    Boe,
    Citation Envoyé par gengiskhan72 Voir le message
    c'est noté

    merci =)

    et pour culture g, qq1 me montrerai comment annoncer un lbl?
    Pour quoi faire, puisque ta réponse dit que tu ne t'en serviras pas ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par gengiskhan72 Voir le message
    c'est noté

    merci =)

    et pour culture g, qq1 me montrerai comment annoncer un lbl?
    Exactement comme tu l'as vu précédemment :

    tu dois avoir dans ton code une étiquette (un nom suivi d'un ":")
    et tu t'y rends en faisant
    L'étiquette peut être avant ou après le goto (mais elle doit être dans la fonction d'appel), cela marche en C comme en C++.

    Quant à l'utilité des goto, ils ne font pas tomber les cheveux, ni pousser les poils des oreilles, et ne rendent pas sourd non plus. Cependant, les cas où ils peuvent être utiles en C sont rares. En gros, cela tourne autour de deux idées :

    1- dans des boucles imbriquées, pour sortir d'une boucle, on n'a que l'instruction break, qui remonte d'un niveau. Le goto sort d'un seul coup. C'est pratique et ca va vite (ce n'est pas un détail : minimiser la taille des boucles est souvent un moyen de gagner du temps d'exécution)
    2- dans des programmes un peu compliqués, pour renvoyer vers une unique "situation d'erreur" dans la fonction. En C++ on utiliserait probablement des exceptions. En C, des gotos renvoyant vers une zone spécifique sont une bonne idée.

    Maintenant, même s'il y a (cf ci dessus) des cas légitimes d'utilisation du goto, voire, des situations dans lesquelles il clarifie le code (en disant ou une condition va, au lieu de dire d'où elle part), son utilisation provoque généralement de tels débats qu'il vaut mieux s'en abstenir si l'on doit développer en équipe. Sinon on est parti pour une de ces grandes controverses stériles qui font le bonheur des développeurs et le désespoir des chefs de projet.

    Ceci dit, si tu devais te retrouver dans l'une de ces empoignades, voici un joli article de Knuth, en défense du goto http://pplab.snu.ac.kr/courses/adv_p...p261-knuth.pdf. Il y a un article "opposé" de Dijkstra, que je n'arrive pas à trouver sur l'internet...

    Francois
    Dernière modification par Invité ; 03/07/2009 à 08h35.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Par défaut
    merci à toi FCharton!



    et pour répondre, bah, c'est pour savoir au moins où je met les pieds en apprennant le C, autant en savoir plus meme si je ne l'utilise pas, que moins...j'ai toujours fait comme ca, et apprendre des choses innutiles, n'est pas toujours innutile, surtout le jour où on en a besoin ^^

  8. #8
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Pour faire écho à fcharton, il existe de (très) très rares cas en C où un "goto" est non seulement souhaitable, mais même "idéal", pour des raisons de performances et/ou de gestion d'erreurs complexes.

    Ceci étant dit, à part dans des cas hyper pointus comme au fin fond du scheduler d'un système d'exploitation, d'une routine d'erreur système ou d'un driver très hautes performances, il n'est JAMAIS nécessaire d'utiliser un "goto". Si jamais cela s'avère "nécessaire", dans 90% des cas c'est un "faux goto", qui est implémenté soit par break [hors du cas spécifique des "switch / case" bien sûr], soit par continue.
    Les 10% restants, c'est plutôt que l'on n'a pas su penser correctement son algorithme.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  9. #9
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par fcharton Voir le message
    Maintenant, même s'il y a (cf ci dessus) des cas légitimes d'utilisation du goto, voire, des situations dans lesquelles il clarifie le code (en disant ou une condition va, au lieu de dire d'où elle part), son utilisation provoque généralement de tels débats qu'il vaut mieux s'en abstenir si l'on doit développer en équipe.
    +1 (sur la conclusion; nous ne sommes peut-etre pas d'accord sur les cas ou ils sont legitimes et ou ils clarifient les choses, mais vu la conclusion, ca n'a aucune importance pratique)

  10. #10
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Citation Envoyé par fcharton Voir le message
    Il y a un article "opposé" de Dijkstra, que je n'arrive pas à trouver sur l'internet...
    Go To Statement Considered Harmful (Edsger W. Dijkstra) je suppose.

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Il y a même un article dessus:
    http://en.wikipedia.org/wiki/Considered_harmful
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/09/2009, 13h21
  2. aide pour les changement des labels des icones de mon menu
    Par Invité dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 15/08/2009, 01h45
  3. Pourquoi les GOTO ne sont pas appréciés ?
    Par Hoffa dans le forum Débuter
    Réponses: 6
    Dernier message: 29/10/2008, 12h54
  4. Question concernant les goto
    Par leovenus dans le forum Fortran
    Réponses: 2
    Dernier message: 11/03/2008, 11h59

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