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. #1
    Membre averti
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 37
    Par d�faut Que pensez vous du goto
    Bonjour � tous, je me trouve devant un probl�me, � savoir que partout o� je vais on me dit: "bouuh n'utilise pas goto c'est illisible, c'est nul, et en plus c'est pas bien". Mais voil�, je me suis donc d�brouill� sans jusqu'� maintenant, mais je pense que pour ce que je dois faire l'utilisation de goto rendrait les choses plus claires.

    En effet, je r�cup�re une base de donn�es en C sachant que les champs vides ne sont pas dans la base de d�part. Donc quand je ne d�tecte pas un champ, je dois sauter toute une partie de mon code (qui traite les champ qui ne sont pas la), pour aller vers le reste.

    Pourquoi un goto ne serait pas indiqu� dans ce cas la? Je veux bien faire des tests avec des indices et compagnie mais je pense qu'un goto serait nettement plus clair, m�me pour les relecteurs.
    D'avance merci.

  2. #2
    Membre chevronn�
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par d�faut
    La regle : Pas de goto dans un programme

    La valeur d'un programmeur est inversement proportionnel au nombre de goto que l'on trouve dans son code

    Pour clarifier ton programme Utilise les sous programmes avec les commentaire qui vont bien

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 37
    Par d�faut
    Citation Envoy� par argoet
    La regle : Pas de goto dans un programme
    oui bon je veux bien la croire ta r�gle, mais tu me r�p�tes un peu ce que j'ai dit en haut ("les gotos c'est pas bien")... J'aimerai juste savoir pourquoi... Et pourquoi alors a-t-on impl�ment� le goto si c'est compl�tement inutile, voire dangereux?
    J'ai pas demand� ce que vous pensiez du goto, j'ai demand� pourquoi vous pensiez qu'il fallait/ne fallait pas l'utiliser.

  4. #4
    Membre �m�rite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    D�tails du profil
    Informations personnelles :
    �ge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par d�faut
    L'utilisation de goto casse le principe m�me de programmation structur�e.

    Ca pose d'�normes probl�mes en preuve algorithmique, de plus l'�tat du programme peut devenir ind�termin� dans un contexte multi-thread.

    De toute mani�re, pour utiliser goto, il faut des branchements, autant utiliser ceux-ci pour "piloter" les portions de code � ex�cuter.

    Dans le cadre de boucle, il est aussi lisible et efficace d'utiliser des clauses break, continue, return.

    Le goto est un h�ritage de l'assembleur, rappelons que le C est un macor-assembleur avant de se vouloir un langage de haut niveau.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 37
    Par d�faut
    Citation Envoy� par Caine
    L'utilisation de goto casse le principe m�me de programmation structur�e.

    Ca pose d'�normes probl�mes en preuve algorithmique, de plus l'�tat du programme peut devenir ind�termin� dans un contexte multi-thread.

    De toute mani�re, pour utiliser goto, il faut des branchements, autant utiliser ceux-ci pour "piloter" les portions de code � ex�cuter.

    Dans le cadre de boucle, il est aussi lisible et efficace d'utiliser des clauses break, continue, return.

    Le goto est un h�ritage de l'assembleur, rappelons que le C est un macor-assembleur avant de se vouloir un langage de haut niveau.
    Alors je vais r�pondre point par point, le probl�me de preuve ne me d�range pas outre mesure dans mon cas, je ne fais pas de multithreading, ce n'est pas dans une boucle, et justement ce que je fais dans mon programme est vraiment tr�s proche de ce que je fais en assembleur, vu que je fais de l'acquisition en binaire, et donc que je me d�place d'octets en octets sur un fichier sans jamais utiliser rien de plus complexe qu'un for ou un if... (bon des fprintf ok mais �a va pas tr�s loin).

  6. #6
    Membre �m�rite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    D�tails du profil
    Informations personnelles :
    �ge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par d�faut
    Je te conseilles de faire une recherche sur le net sur le sujet.

    J'avoue que �a fait trop longtemps que j'ai quitt� les bancs de la FAC pour me souvenir des raisons exhaustives et exactes de ne pas utiliser GOTO.

    Mais apr�s tout teste avec goto, en debug etc... Je ne suis pas int�griste sur ce point, mais je me souviens juste qu'un programme perd le c�t� structur� avec goto.

    On peut arriv� � une �tiquette par oubli de branchement sur une sortie ou sur une autre �tiquette.

    Ceci peut �tre d�sastreux, immagines que tu arrives l� o� tu utilises un pointeur alors qu'il n'est pas initialis�.

    Enfin, en programmation structur�e, �a arrive aussi.

    Si tu trouves un site bien fait parlant du probl�me, je suis int�ress�.

    Bon GOTO

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 37
    Par d�faut
    Mais apr�s tout teste avec goto, en debug etc... Je ne suis pas int�griste sur ce point, mais je me souviens juste qu'un programme perd le c�t� structur� avec goto.
    Oui je vais tester, je verrai bien si c'est compl�tement aberrant (ce qui m'�tonnerait fort ;-))


    On peut arriv� � une �tiquette par oubli de branchement sur une sortie ou sur une autre �tiquette.
    Je n'oublie jamais rien 8)


    Ceci peut �tre d�sastreux, immagines que tu arrives l� o� tu utilises un pointeur alors qu'il n'est pas initialis�.
    Je n'utilise m�me pas de pointeurs dans mon programme.

    Si tu trouves un site bien fait parlant du probl�me, je suis int�ress�.
    Ok je vous tiens au courant. Merci beaucoup pour ta r�ponse, c'est tr�s sympa, je vais tenter de rechercher.

  8. #8
    Membre chevronn�
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par d�faut
    Citation Envoy� par ulukahio
    Citation Envoy� par argoet
    La regle : Pas de goto dans un programme
    oui bon je veux bien la croire ta r�gle, mais tu me r�p�tes un peu ce que j'ai dit en haut ("les gotos c'est pas bien")... J'aimerai juste savoir pourquoi... Et pourquoi alors a-t-on impl�ment� le goto si c'est compl�tement inutile, voire dangereux?
    J'ai pas demand� ce que vous pensiez du goto, j'ai demand� pourquoi vous pensiez qu'il fallait/ne fallait pas l'utiliser.
    Le goto � �t� �crit � une �poque ou les sous programmes , les boucles et autres instruction "structur�" n'existaient pas

    Reprends l'un des premiers basic microsoft (Dans les ann�es 80-81)
    Pour boucler un dizaine de fois tu faisais :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    10 I=0
    20 I = I + 1
    30 PRINT I
    40 IF I < 10 Then GOTO 20 
    50 END
    Bon ben maintenant tu admettras que cette fa�on de faire n'est plus d'actualit� (surtout avec le C)

    CQFD

  9. #9
    R�dacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Juin 2004
    Messages
    5 840
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par d�faut
    Pour faire simple: je ne suis pas du tout d'accord avec toi argoet (et tout ceux qui pense la m�me chose que toi!):
    Citation Envoy� par argoet
    Le goto � �t� �crit � une �poque ou les sous programmes , les boucles et autres instruction "structur�" n'existaient pas
    Dans ce cas pourquoi l'avoir repri dans des langages r�cents tel que le C# : surtout qu'il existe des langage sans goto.

    Les goto rendent le code illisible lorsqu'il sont mal utilis� mais ce n'est pas une exception en C. Il ne sont pas plus dangereux que des appels � malloc mal construit.

    Je n'est jamais eu � utilis� de goto dans mes codes en C mais ce n'est pas par peur de les utiliser mais parce que je n'en ai pas besoin. Il sont tr�s utiles pour sortir d'une multitude de boucle imbr�qu�.

  10. #10
    Membre �clair� Avatar de calogerogigante
    Homme Profil pro
    Technicien r�seau
    Inscrit en
    Avril 2003
    Messages
    608
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Technicien r�seau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par d�faut
    Moi, personnellement, les goto, je les utilise !!

    Mod�rement, mais je les utilise quand m�me...

    Parfois, c'est bien pratique pour faire des petits tests, et je n'ai aucune honte, ni aucun probl�me � les utiliser quand c'est n�cessaire...

    Exemple tr�s fr�quents dans mes programmes personnels :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //-------------------------------------------------------------
    int testouinon(void) // renvoit 1 si oui, renvoit 0 si non.
    {
    int ch;
     
    testOUIouNON:
    ch=getch();
    switch (ch) {
                case 'o': return 1;
                case 'n': return 0;
                 default: goto testOUIouNON;
                }
    }
    //-------------------------------------------------------------
    Ca n'a jamais plant�, ni ralentit mon application...

    FAUT JUSTE VEILLER A NE PAS TROP MULTIPLIER LEUR USAGE, POUR EVITER QUE TON CODE NE DEVIENNE ILLISIBLE...

  11. #11
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ing�nieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par d�faut
    C'est dangereux et cela ne sert � rien

    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
    //------------------------------------------------------------- 
    int testouinon(void) // renvoit 1 si oui, renvoit 0 si non. 
    { 
                int ch; 
                while(1)
                {
                            ch=getch(); 
                            switch (ch)
                            { 
                                        case 'o': return 1; 
                                        case 'n': return 0; 
                            } 
                }
    } 
    //-------------------------------------------------------------

  12. #12
    Membre �clair� Avatar de calogerogigante
    Homme Profil pro
    Technicien r�seau
    Inscrit en
    Avril 2003
    Messages
    608
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Technicien r�seau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par d�faut
    Je vois pas ce que cela a de dangereux...

    D'accord avec ton code !!
    Mais je trouve quand m�me le mien bien plus lisible avec ce petit label, et ce petit goto...

    ;-) ;-) ;-) ;-) ;-)

  13. #13
    Membre �prouv�
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    66
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2004
    Messages : 66
    Par d�faut
    Citation Envoy� par argoet
    La regle : Pas de goto dans un programme
    Moi je dis : pas de goto pour ceux qui n'ont pas encore compris les principes du C .. par contre bien utilis� �a peut s'av�rer utile comme par exemple dans un code tr�s long pour rejoindre facilement un point de sortie en erreur dans la m�me fonction, mais bon, faut savoir s'en servir

    La valeur d'un programmeur est inversement proportionnel au nombre de goto que l'on trouve dans son code
    �a, c'est ce que disent ceux qui ne comprennent pas l'inter�t des goto

    Pour clarifier ton programme Utilise les sous programmes avec les commentaire qui vont bien
    Tu veux dire "sous-routines"?? Parfois tu ne veux pas appeler une sous-routine, surtout que tu ne peux pas toujours compiler inline et qu'une sous-routine va prendre plus de temps qu'un simple "goto error" !

  14. #14
    R�dacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Juin 2004
    Messages
    5 840
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par d�faut
    Citation Envoy� par Ti-R
    C'est dangereux et cela ne sert � rien

    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
    //------------------------------------------------------------- 
    int testouinon(void) // renvoit 1 si oui, renvoit 0 si non. 
    { 
                int ch; 
                while(1)
                {
                            ch=getch(); 
                            switch (ch)
                            { 
                                        case 'o': return 1; 
                                        case 'n': return 0; 
                            } 
                }
    } 
    //-------------------------------------------------------------
    Par contre je suis enti�rement d'accord que si l'on peut s'en passer autant le faire. Et les goto ne sont pas plus dangereux d'un getch

  15. #15
    mat.M
    Invit�(e)
    Par d�faut
    Citation Envoy� par argoet
    La regle : Pas de goto dans un programme
    est-ce que tu sais ce que c'est le language assembleur et notamment celui du x86
    A quoi servent les instructions JMP , JGE etc ?? ( language C=assembleur haut niveau )

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    MOV AX,200
    decr_ax:
    DEC AX
    CMP AX,10
    JBE decr_ax
    qu'est-ce qu'on fait ici ??

    La valeur d'un programmeur est inversement proportionnel au nombre de goto que l'on trouve dans son code
    tiens ......tiens .....et dans quel livre cette maxime est statu�e ??


    C'est vrai il faut �viter les goto mais parfois c'est bien utile .....
    Dans les exemples du SDK de Direct X il y a utilisation de quelques goto .
    Ils sont vraiment mauvais programmeurs alors chez M$

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 37
    Par d�faut
    Oui je suis d'accord avec toi, mais ce n'est pas dans ce type de circonstances que je compte utiliser goto.

    (on est � l'int�rieur d'une boucle while qui lit une par une les lignes d'un fichier texte)

    Si quelqu'un pouvait me donner un code propre et s�r correspondant � celui ci:

    if (ligne[i]==2) //le chiffre correspond au nombre de champs non pr�sents dans la base d'origine
    goto champ2;
    else if (ligne[i]==3)
    goto champ3;
    else{ //traitement du champ1}

    champ2: //traitement du champ2

    if (ligne[i]==1)
    goto champ3;

    champ3: //traitement du champ 3

  17. #17
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ing�nieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    if (ligne[i]==2) //le chiffre correspond au nombre de champs non présents dans la base d'origine 
            fonction_champ2(); 
    else if (ligne[i]==3) 
            fonction_champ3(); 
    else{ fonction_champ1()} 
    if (ligne[i]==1) 
            fonction_champ3();

  18. #18
    R�dacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Juin 2004
    Messages
    5 840
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    if( ligne[i] == 2 )
    {  /* traitement du champ2 */ }
    else if ( lign[i] == 1 || ligne[i]==3 )
    { /* traitement du champ3 */ }
    else{ /* traitement du champ1 */}

    la m�me avec les switch:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    switch( ligne[i] )
    {
      case 2:
        /* traitement du champ2 */
      break;
      case 1:
      case 3:
        /* traitement du champ3 */
      break;
      default:
        /* traitement du champ1 */
      break;
    }
    Si les sont peu utiliser c'est qu'ils sont facilement remplassable.

  19. #19
    Membre �clair� Avatar de calogerogigante
    Homme Profil pro
    Technicien r�seau
    Inscrit en
    Avril 2003
    Messages
    608
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Technicien r�seau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par d�faut
    Citation Envoy� par ulukahio
    Oui je suis d'accord avec toi, mais ce n'est pas dans ce type de circonstances que je compte utiliser goto.

    (on est � l'int�rieur d'une boucle while qui lit une par une les lignes d'un fichier texte)

    Si quelqu'un pouvait me donner un code propre et s�r correspondant � celui ci:

    if (ligne[i]==2) //le chiffre correspond au nombre de champs non pr�sents dans la base d'origine
    goto champ2;
    else if (ligne[i]==3)
    goto champ3;
    else{ //traitement du champ1}

    champ2: //traitement du champ2

    if (ligne[i]==1)
    goto champ3;

    champ3: //traitement du champ 3
    L� par contre, en effet, je trouve d�j� l'utilisation du goto risqu�e... Tr�s risqu�e...

    Plut�t d'accord avec les propositions des deux posts au-dessus de celui-ci...

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 37
    Par d�faut
    Citation Envoy� par gege2061
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    if( ligne[i] == 2 )
    {  /* traitement du champ2 */ }
    else if ( lign[i] == 1 || ligne[i]==3 )
    { /* traitement du champ3 */ }
    else{ /* traitement du champ1 */}
    iagine ce que �a donne avec une centaine de champs, quand tous saufs le dernier ne sont pas pr�sents.... tu marques un if avec cent tests dedans? Pas tr�s lisible tout �a...

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 18 1234511 ... 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