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 :

Que pensez vous du goto [Débat]


Sujet :

C

  1. #181
    Membre Expert

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

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut


    Je crois qu'il y a confusion.

    une variable locale à une fonction si elle n'est pas déclaré static est détruite en sortie de la fonction.
    Si elle est de type pointeur et qu'une allocation dynamique a été faite alors les données sont bien présentes sur le tas mais tu ne pourras plus y accéder sinon je suis curieux de voir comment...
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  2. #182
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Ah oui c'est vrai. Les données allouées sont belles et bien intactes mais le pointeur sur ces données, qui est ine variable locale automatique, est définitivement ou irrémédiablement perdu. Je m'excuse. Donc malloc() ca marche pas mais les variables locales static (ce sont bien des variables locales quand même hein! ) ca marche. Mais ca ne change rien à la manière d'utiliser longjmp() avec ou sans signal .

  3. #183
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    (hegros: Dit plutôt "perdue" que "détruite" dans le cas d'un longjmp().
    Enfin, ça ne fait pas de grande différence ne C puisqu'il n'y a pas de destructeur. Mais s'il y en avait, ils ne seraient pas appelés lors d'un longjmp())

    Melem: Content qu'on soit parvenus à se comprendre.
    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.

  4. #184
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 168
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    quand il s'agit d'écrire un intérpréteur , c'est obligé d'utiliser les goto, est ce qu'il y a une autre solution

    Turbo_chess
    Demain n'est plus à attendre mais à inventer !!!

  5. #185
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je ne vois pas pourquoi ce serait obligé...
    Un interpréteur est généralement plus ou moins un automate d'états fini, qui n'a pas besoin de goto...
    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.

  6. #186
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Melem
    Oui parce qu'une variable locale static c'est quand même une variable locale!
    Ceci n'a aucun sens, parce que ce n'est pas assez précis.
    Un variable 'locale' statique est une variable persistante de portée locale. Voilà.

    http://emmanuel-delahaye.developpez....page=Page4#XVI
    Pas de Wi-Fi à la maison : CPL

  7. #187
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Melem
    Dans le main() il n'y a ni if ni boucle mais chaque fois qu'une division par 0 a lieu, le signal SIGFPE est généré. C'est à fpe_handler() qu'on a donné la charge de traiter cette exception. Pour retourner quelque part dans main(), on utilise longjmp(). Voilà un des interêts de sauter quelque part dans une fonction fille, mère ou tante comme certains le disent. Et tout ca c'est pas fesable avec du goto.

    En plus ce qui est bien avec cette technique c'est qu'en plus des signaux prédéfinis, on peut bien sur en créer des nouveaux à l'aide de simples #defines. Pour générer un signal (comme le throw du C++ ou de Java), on utilise la fonction int raise(int sig). Et tout ca bien sur, ca marche aussi bien sous Windows que sous OS/2 ou UNIX/Linux parce que c'est standard.

    Et dernière chose, longjmp() permet de sortir rapidement d'une fnction profondément imbriquée donc il n'est pas seulement utile qu'avec signal.
    Je persiste et je signe c'est inutile pour SIGFPE ou SIGDIV... Si la pensée est claire, le code aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int OK= 0 ;
     
    while ( ! OK )
      {
         printf("Donnez-moi un nombre, je vais vous calculer l\'inverse.\n");
         scanf("%g", &x);
         if ( x == 0.0 )
           {
           }
         else
             OK = 1 ;
      }
    Dans TOUS les codes de maths, il vaut mieux tester avant... Et si c'est pas des questions mais un calcul auto, alors mettre un flag d'erreur et éventuellement soit sortir soit avoir une valeur par défaut....

    Quant aux fonctions profondément imbriquées , c'est aussi pire... un "return SUCCESS or ERROR" avec des tests dans la fonction du dessus marchent parfaitement et est LISIBLE et MAINTENABLE.
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #188
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par souviron34
    Si la pensée est claire, le code aussi :
    +1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         scanf("%g", &x);
         if ( x == 0.0 )
    x étant un float, ca va pas faire....

    Déjà, il faut tester la valeur retournée par scanf(), purger en cas d'erreur, puis pour 0, c'est éventuellement 0.0f, mais de toutes façons != et == ne fonctionnent pas avec les flottants. Il faut faire une différence, utiliser fabs() et voir si on est inférieur à DBL_EPSILON (<float.h>).
    Pas de Wi-Fi à la maison : CPL

  9. #189
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par souviron34
    Je persiste et je signe c'est inutile pour SIGFPE ou SIGDIV
    Tout a fait d'accord. Mais j'ai jamais dit que c'est la meilleure façon de calculer l'inverse d'un nombre, c'était juste pour donner un exemple d'utilisation de setjmp avec signal. Ce genre de code est très fréquent pour traiter le SIGINT par exemple. Avec goto on peut pas le faire. N'oubliez pas que c'est la le sujet du débat.

  10. #190
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    +1

    x étant un float, ca va pas faire....

    Déjà, il faut tester la valeur retournée par scanf(), purger en cas d'erreur, puis pour 0, c'est éventuellement 0.0f, mais de toutes façons != et == ne fonctionnent pas avec les flottants. Il faut faire une différence, utiliser fabs() et voir si on est inférieur à DBL_EPSILON (<float.h>).
    absolument, mais je voulais juste exposer le principe... (je fais systématiquement la diff. Mais d'ailleurs j'ai remarqué que c'était plus 1.e-06 que DBL_EPSILON... en général...)
    (d'ailleurs dans le code original il lisait un double avec %f...)

    Melem a écrit :

    Ce genre de code est très fréquent pour traiter le SIGINT par exemple. Avec goto on peut pas le faire. N'oubliez pas que c'est la le sujet du débat.
    J'ai fais beaucoup de traitement de SIGINT et je n'ai jamais utilisé de goto ou de jmp... Justement c'est là l'objet du débat..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  11. #191
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 486
    Points : 2 440
    Points
    2 440
    Par défaut
    A travers mes lectures d'apprentissage, j'ai appris à ne jamais programmer avec Goto, bien que j'ai lu des arguments traitant le pour du contre.
    Personnellement, je trouve que cette fonction est trop bourrin...........
    Les pièges de l'Internet
    Helix, réponse à une intrusion


    "La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
    "Si j'ai vu plus loin, c'est en me tenant sur les épaules de géants." Isaac Newton

  12. #192
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par smoove
    A travers mes lectures d'apprentissage, j'ai appris à ne jamais programmer avec Goto, bien que j'ai lu des arguments traitant le pour du contre.
    Personnellement, je trouve que cette fonction est trop bourrin...........
    "goto" n'est pas une fonction.
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  13. #193
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 486
    Points : 2 440
    Points
    2 440
    Par défaut
    Citation Envoyé par David.Schris
    "goto" n'est pas une fonction.
    c'est vrai, c'est une instruction ........
    Les pièges de l'Internet
    Helix, réponse à une intrusion


    "La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
    "Si j'ai vu plus loin, c'est en me tenant sur les épaules de géants." Isaac Newton

  14. #194
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 69
    Points : 41
    Points
    41
    Par défaut
    Je trouve que goto est utile dans certains cas très précis comme lorsque on veut aller vers une portion de code directement (désallocation de ressources par exemple) au lieu de l'écrire n fois... Je ne trouve pas la solution de faire une fonction où on passe tous les arguments à libérer plus élégante... bref si le goto est utilisé avec parcimonie et d'un coup d'oeil on comprend à quoi il sert je vois pas où est le problème.

  15. #195
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut
    [Mon avis]

    Je trouve que goto ça ne sert à rien, car dans un programme C, la programmation fonctionnelle est de rigueur.

    Quel est l'intérêt d'un GOTO dans un code de moins de 10 lignes, et quel est l'intérêt d'une fonction qui ferait plus de 10 lignes et nécessiterait un appel au GOTO

    Quel est l'intérêt d'un GOTO si la programmation ne se fait pas au numéro de ligne ?

    Le C n'est tout simplement pas fait pour fonctionner comme ça, à moins que j'ai mal regardé.

    Je conçois surtout un GOTO comme un moyen de faire de la récursion, et comme le C autorise la récursion de façon intrinsèque et sans GOTO, j'ai du mal à voir l'intérêt d'un GOTO.

    Merci en tout cas de planter le mainteneur dans un source de 2000 lignes avec un gros GOTO au début du programme LOL trop sympa, la prochaine fois je le verrai venir.
    [/Mon avis]

  16. #196
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par kromartien
    Je trouve que goto ça ne sert à rien, car dans un programme C, la programmation fonctionnelle est de rigueur.
    Depuis quand le C est-il un langage fonctionnel ?

    Citation Envoyé par kromartien
    Quel est l'intérêt d'un GOTO dans un code de moins de 10 lignes, et quel est l'intérêt d'une fonction qui ferait plus de 10 lignes et nécessiterait un appel au GOTO
    Désolé, je ne comprends pas.

    Citation Envoyé par kromartien
    Quel est l'intérêt d'un GOTO si la programmation ne se fait pas au numéro de ligne ?
    Je ne vois pas le rapport (j'ai probablement mal compris aussi).

    Citation Envoyé par kromartien
    Le C n'est tout simplement pas fait pour fonctionner comme ça, à moins que j'ai mal regardé.
    Le C a été fait avec le goto (d'ailleurs, c'est en minuscules) donc il a été fait pour pouvoir fonctionner comme ça.

    Citation Envoyé par kromartien
    Je conçois surtout un GOTO comme un moyen de faire de la récursion [...]
    Peux-tu me donner un exemple de récursion faite avec un goto ?
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  17. #197
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par kromartien
    [Mon avis]

    Je trouve que goto ça ne sert à rien, car dans un programme C, la programmation fonctionnelle est de rigueur.
    On peut traiter le C de langage séquentiel, ou de langage procédural, mais on ne peut pas le traiter de langage fonctionnel

    Quel est l'intérêt d'un GOTO dans un code de moins de 10 lignes, et quel est l'intérêt d'une fonction qui ferait plus de 10 lignes et nécessiterait un appel au GOTO
    Quel rapport entre le nombre de ligne et la présence ou non de goto

    Si l'utilisation de goto est nécessaire (en se comprenant bien: s'il n'y a pas moyen de faire facilement sans), tu peux tres bien avoir une fonction de quelques lignes à peine, et avoir la présence d'un goto...

    En plus, on a déjà du mal à faire passer le fait de limiter le nombre de ligne des fonctions à 50 lignes... alors à 10
    Quel est l'intérêt d'un GOTO si la programmation ne se fait pas au numéro de ligne ?
    On n'en est plus au temps du BASIC, qui nécessitait de savoir quel était le numéro de ligne...

    Avec la présence des étiquettes (labels), et tout étant toujours lu "de haut en bas", cet argument ne tient absolument pas
    Le C n'est tout simplement pas fait pour fonctionner comme ça, à moins que j'ai mal regardé.
    Que du contraire... Et, d'ailleurs, du fait qu'il s'agit d'un langage procédural, il faut bien te rendre compte que tout bloc d'instructions créé en C est un bloc faisant appel à un goto de manière détournée
    Je conçois surtout un GOTO comme un moyen de faire de la récursion, et comme le C autorise la récursion de façon intrinsèque et sans GOTO, j'ai du mal à voir l'intérêt d'un GOTO.
    Heuu définis récursion
    Merci en tout cas de planter le mainteneur dans un source de 2000 lignes avec un gros GOTO au début du programme LOL trop sympa, la prochaine fois je le verrai venir.
    [/Mon avis]
    Si tu avais lu l'ensemble du débat tu aurais vu que ce qui ressort principalement c'est:
    1. Autant que faire se peut, éviter l'utilisation du goto
    2. Si vraiment on n'a pas le choix:
      • Limiter au maximum son utilisation
      • Préférer un goto emmenant vers "la sortie" plutot que ramenant "vers l'entrée" de la fonction
      • veiller autant que faire se peut à ce que l'instruction ne soit pas trop éloignée de l'étiquette

    De prime abord, il y a parfaitement moyen de s'organiser pour les éviter... et, de manière générale, c'est ce qu'il faut essayer de faire

    Sans atteindre l'extrémisme d'un de mes profs qui menaçait de nous jeter par la fenetre si on l'utilisait, il faut reconnaitre qu'en de tres rares occasions, le goto reste malgré tout l'une des solutions potentielle à certains problèmes... Mais cela ne veut en aucun cas dire qu'il faut en utiliser à tous bouts de champs
    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

  18. #198
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut

    itération et non récursion. J
    e me rappelle juste que le Goto c'est une instruction Basic, alors pour l'utiliser il faut mettre des étiquettes dans le code, du genre LIBL 4, ou si l'interpréteur numérote automatiquement les lignes, GOTO numligne;
    J'ai juste du mal à concevoir que l'on puisse dans un programme C éparpillé dans tout un tas de fichiers utiliser des étiquettes et des goto.
    Je pensais vraiment que la programmation procédurale, ou le fait de modulariser et de factoriser le code devait forcément restreindre, voire amener à faire disparaître complètement le GOTO au profit de simples structures conditions et rebouclages while, for.

  19. #199
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Attention, il ne s'agit absolument pas "d'éparpiller" les gotos dans tout un tas de fonctions ou, pire, dans tout un tas de fichiers...

    D'ailleurs, goto ne fonctionne qu'à l'intérieur d'une meme fonction... sinon, c'est un longjump qu'il faut utiliser

    D'un autre coté, oui, bien sur, la programmation procédurale tend à restreindre de plus en plus l'utilisation du goto au profit de structures itératives/selectives diverses, bien sur, l'utilisation du goto est de nature à amener une certaine complexité dans une optique de factorisation et de modularisation, mais cela ne signifie aucunement que le goto ne doit absolument plus etre utilisé...

    Si, la regle générale reste d'essayer d'éviter autant que faire se peut l'utilisation du goto, il n'en reste pas moins que toute regle a ses exceptions, et qu'on peut donc envisager de trouver de rares cas dans lesquels le goto reste l'alternative "la moins mauvaise" (car je n'irai pas jusqu'à la qualifier de "la meilleure" ) : à l'impossible, nul n'est tenu
    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

  20. #200
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par kromartien
    En fait le longjump ou le jump, ce sont des instructions héritées du langage d'assemblage.
    ...Tout comme le goto, qui n'est qu'un jmp déguisé, ou l'appel/le retour de fonctions ...

    Le C est l'un des langages de troisième génération ("proche du langage humain") qui soient le plus proche du langage machine/de l'assembleur...

    Mais il faut bien te dire que, de toutes manières, quel que puisse etre le langage utilisé, tu finira toujours par retomber sur une construction basée sur les instructions qu'est capable de supporter le processeur

    C'est ainsi que, bien qu'il soit décrié de manière de plus en plus insistante, tous les langages de programmation - en ce, y compris les plus récents - proposent une instruction qui se rapproche du goto, bien souvent de ce nom, d'ailleurs

    Ce dont j'essaye de te faire prendre conscience, c'est que meme dans le cadre d'une simple structure de test "vrai/faux" du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(variable==value)
    {
        /* do something */
    }
    else
    {
        /* do something other */
    }
    cela fonctionnera sensiblement de la meme manière que le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(variable!= value)
        goto ELSE
    /* do something if false */
    goto ELSEEND
    ELSE:
        /* do something if true */
    ELSEEND:
    /* continuing */
    et que, du point de vue du langage machine, il y a de fortes chances pour que cela soit au final implémenté ainsi...

    Et ce qui est vrai pour un test "vrai/faux" est vrai pour un "test à choix multiple" et pour les différents types de boucles que l'on peut envisager...

    Finalement, la seule chose qui nous incite à éviter l'utilisation du goto, c'est juste la facilité apportée à la (re)lecture et à la (re)compréhension du code...

    Evidemment, quand on pense au temps perdu à essayer de (re)comprendre un code donné ou à y chercher des erreurs si on ne comprend déjà pas ce qu'on (re)lit... on se dit que ce "simple" fait sera pour beaucoup dans la facilité que l'on aura à retrouver les erreurs

    Mais voilà, pour paraphraser un écrivain qui faisait dire à son héros (soit aghata christie à H Poirot, soit conan doyle à sherlock holmes):
    une fois écartées toutes les solutions impossibles, ne reste que la vérité, aussi improbable puisse-t-elle parraitre
    on pourrait dire
    une fois écartées toutes les solutions inapplicables, ne reste que la solution utilisable, aussi peu appréciable puisse-t-elle etre
    Et donc, si aucune des structures existantes n'est sereinement envisageable, il ne nous reste plus qu'à nous tourner vers la solution "mere de toutes les autres": le 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

+ Répondre à la discussion
Cette discussion est résolue.
Page 10 sur 18 PremièrePremière ... 67891011121314 ... DernièreDernière

Discussions similaires

  1. Que pensez-vous des générateurs de doc PHP ?
    Par Nonothehobbit dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 64
    Dernier message: 10/07/2007, 10h17
  2. Que pensez vous de filemaker
    Par thpopeye dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 14/06/2007, 15h20
  3. Que pensez vous du nouveau kernel 2.6 ?
    Par GLDavid dans le forum Administration système
    Réponses: 58
    Dernier message: 02/08/2004, 15h45
  4. [Débat] Que pensez-vous des langages à typage dynamique?
    Par Eusebius dans le forum Langages de programmation
    Réponses: 14
    Dernier message: 16/06/2004, 12h12
  5. Que pensez vous du mariage ASP Flash?
    Par tyma dans le forum Flash
    Réponses: 4
    Dernier message: 09/07/2003, 15h00

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