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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Par défaut
    En fait, le pb pour éviter les goto est souvent un problème d'algo.
    Ne pourrais-tu pas mettre en place un code à base de pointeur ?
    1 -Tu fais pointer le pointeur sur le champ1,
    2 - tu récupères le nombre de champ à sauter,
    3 - tu incrémentes ton pointeur du nombre de champ correspondant
    4 - tu appelles mon_traitement (mon_pointeur) ?

    Bien sur ne connaissant pas ton code et ton traitement il n'est pas sûr que cela soit réalisable...

    Mais généralement il est fortement conseiller de mettre en place une solution sans goto (pourquoi ? .... Parce que.... )

  2. #2
    Membre éclairé Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Par défaut
    le 'no goto ' me fait aussi penser à certaines personnes qui vont te dire de ne surtout pas utiliser le 'switch' parceque c'est pas compilé de maniére optimum, que le 'continue' dans un while n'est pas propre parceque tu ne respectes pas ta condition de sortie etc....

    n'empeche que un beau et magnifique goto bien placé et ben c'est tres propre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    piVar = (int*) calloc(SIZE,sizeof(int));
    if(!piVar )
    goto labelError;
     
    /*traitement*/
     
    return 0;
    labelError:
    return -1;

  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 calogerogigante
    Au plus tu rajoutes de "petits jump" à saute mouton au-dessus de petits bouts de code, au plus tu risques de louper une étape logique du déroulement de ton code... Surtout si tu dis toi-même qu'il risque d'y avoir une centaine de traitements de champs...

    Je ne suis pas foncièrement contre, mais je trouve cela dangereux car tu risques de louper plus facilement une incohérence dans ton code...
    A moins d'être sûr de ce que tu fais à 100 % (exemple: t'as fait un petit organigramme clair qui resprésente toutes les possibilités de cette partie de ton programme utilisant les gotos...)

    A mon avis: ordonner les choses clairement avec un switch (dans ton cas) serait beaucoup plus propre et plus lisible..
    J'ai peut être un gros problème mais je ne vois pas de solutions simple avec un switch...
    PS: j'ai fait un organigramme clair, j'ai rajouté énormément de tests et j'ai beaucoup de temps pour le débuggage, et comme les noms des étiquettes que j'utiliserai seraient très explicites, le risque d'erreur me parait plutôt faible.

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Par défaut
    Le traitement des champs est-il toujours le même ?

  5. #5
    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
    le risque d'erreur me parait plutôt faible.
    Le propre de la programmation: c'est qu'il y a cent façons différentes de faire la même chose... T'es libre, malgré tout ce qu'on peut dire, de choisir ta méthode...

    N'empêche qu'en cas de problème... Ca peut devenir un casse-tête les gotos multipliés exagérement !!

    Mais au fond, l'important, c'est que ça tourne convenablement... Surtout si c'est pour un client...

    C'est mon avis, et je le partage !!
    ;-)

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Comment sont organisés ces fameux champs, ils sont nommés, numérotés ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  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
    Citation Envoyé par jack69
    Le traitement des champs est-il toujours le même ?
    Non ce n'est jamais le même, et c'est bien là le problème, puisque je traite le contenu de chaque champ pour le formater selon les besoins de ma base d'arrivée.

    et calogerogigante heureusement que je suis libre, mais c'est juste que pour l'instant je ne vois pas de solutions qui ne rajoute pas environ 10 000 lignes de codes à mon problème dans ce que l'on me propose .

    (Merci à tous pour votre aide, je ne pensais pas que ce sujet déchainerai autant les passions)

  8. #8
    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 Trap D
    Comment sont organisés ces fameux champs, ils sont nommés, numérotés ?
    Ils n'ont pas de noms, pas de numéros, ils sont exactement comme je l'ai présenté quelques posts au dessus, les ";" étant les séparateurs.

  9. #9
    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
    Citation Envoyé par ronan99999
    ...n'empeche que un beau et magnifique goto bien placé et ben c'est tres propre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    piVar = (int*) calloc(SIZE,sizeof(int));
    if(!piVar )
    goto labelError;
     
    /*traitement*/
     
    return 0;
    labelError:
    return -1;
    C'est pas beau
    Je préfère:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    piVar = (int*) calloc(SIZE,sizeof(int));
    if(!piVar )
         return -1;
     
    /*traitement*/
     
    return 0;
    Et un switch est une bonne solution je pense...
    Si tu as un début de code à nous montrer (un bout à traiter et un bout de code implémenter sur le traitement...)

  10. #10
    Membre éclairé
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Par défaut
    ce que je ferais (mais bon en soft il existe n solutions pour le mm pb) :

    Une fonction de traitement qui prend en parametres l'indice du champ, et qui applique le formatage désiré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <....>
    switch (indice)
    {
       case 1 : traitement 1
       case 2 : traitement 2
       ....
    }
    Et une fonction qui détermine l'indice du champ (en supposant que taille = nb max de champ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    indice = 0;
    while (indice<taille)
    {
       /*on détermine si indice est incrémenté de 1 ou de plus (si champ =2) */
       traitement(indice)
    }
    La difficulté étant comment je sais que je réalise indice++ ou indice+=2...
    Mais ca tu dois savoir le faire, même pour les goto.

  11. #11
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Ta base de données est bien organisée en articles (des "lignes") comportant des champs séparés par des ";" non ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  12. #12
    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 jack69
    ce que je ferais (mais bon en soft il existe n solutions pour le mm pb) :

    Une fonction de traitement qui prend en parametres l'indice du champ, et qui applique le formatage désiré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <....>
    switch (indice)
    {
       case 1 : traitement 1
       case 2 : traitement 2
       ....
    }
    Et une fonction qui détermine l'indice du champ (en supposant que taille = nb max de champ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    indice = 0;
    while (indice<taille)
    {
       /*on détermine si indice est incrémenté de 1 ou de plus (si champ =2) */
       traitement(indice)
    }
    La difficulté étant comment je sais que je réalise indice++ ou indice+=2...
    Mais ca tu dois savoir le faire, même pour les goto.
    Ben voilà une idée qu'elle est bonne, je crois que je vais partir là dessus... (mince j'ai presque honte, c'est idiot en fait... pourquoi j'ai dit "presque"?). Au temps pour moi. Je m'en vais dormir un peu ce soir, on dirait que plusieurs mois de suite à récupérer des fichiers ça me réussit pas. bon ben merci à tous pour votre participation active, et à jack69 qui a la palme de la pertinence.

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par gege2061
    Il sont trés utiles pour sortir d'une multitude de boucle imbréqué.
    Pour faire écho, ils peuvent (et pas doivent, attention !) être carrément cruciaux, notamment lorsque le langage ne supporte pas le concept d'exceptions !!!
    C'est impératif, par exemple, pour réaliser une simili-clause "Try..Finally" en C.

    Après, c'est comme tout : c'est "dangereux" à utiliser parceque l'on peut arriver à peu près n'importe où, que l'on ne peut pas "transférer" de variables au passage (sauf "globales" au bloc courant), et que le source est assez illisible. Ce n'est pas plus risqué que d'utiliser malloc ou fopen sans tester le résultat, mais je déconseille formellement aux débutants de s'amuser à tripatouiller le goto sans auparavant maîtriser les structures habituelles.
    Le problème réel du goto en C n'est pas le nommage des étiquettes (because la portée est réduite), mais plutôt le fait de se planter sur la position de l'étiquette elle-même... En général, une ligne trop bas ou une ligne trop haut...

    ulukahio : J'ai rarement vu un algorithme requérir impérativement des sauts inconditionnels, même à bas niveau (ASM), à l'exception notable de la gestion des erreurs. Et le source n'a jamais été significativement plus court (ni le code plus rapide) avec des goto...

    Je suis plus enclin à penser que tu as un problème de conception, éventuellement au cran immédiatement supérieur de ton programme. Au vu de l'exemple que tu as fourni, ça me semble être un bête analyseur lexical plutôt simple à implémenter (parser + machine à état), j'avoue ne même pas comprendre où tu pourrais bien mettre des "goto" là-dedans... Mais tu ne nous as pas tout dit non plus, comme ce qu'il faut faire ensuite de ces champs (stockage en structure ? Texte ? Requête SQL ?)...

    Toutefois, si tu n'as pas de notions de syntaxe/sémantique/traduction, alors effectivement, c'est normal que tu "patauges" un peu sur l'algo à choisir...
    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

  14. #14
    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 Trap D
    Ta base de données est bien organisée en articles (des "lignes") comportant des champs séparés par des ";" non ?
    Oui mais le problème était qu'il n'y avait pas le même nombre de ";" à chaque ligne, vu que si les champs n'étaient pas remplis, dans la bse on ne retrouvait pas un champ vide, mais pas de champ du tout.

  15. #15
    Membre éclairé
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Par défaut
    Euh, ne t'emballe pas trop au sujet de ma pertinence. Ma solution est certainement une usine à gaz.
    Mais bon, elle est surement mieux que des goto.

    N'oublies pas le tag résolu si tu es satisfait....

  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
    Toutefois, si tu n'as pas de notions de syntaxe/sémantique/traduction, alors effectivement, c'est normal que tu "patauges" un peu sur l'algo à choisir...
    Je crois que tu viens de mettre le doigt sur quelque chose d'important, En gros je n'en ai jamais entendu parler, et on m'a balancé des fichiers à récupérer

    Et c'est fait pour le tag, mais jack, ta solution est effectivement plus claire que la mienne, même si c'est également une usine à gaz. ( de toutes façon, vu le nombre de champ ça v a être difficile pour un débutant de faire un truc tip top et qui marche)

  17. #17
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Une simple remarque, tu n'as pas été très gaté par la personne qui t'a donné les fichiers à récupérer, car ne rien mettre du tout quand les champs sont vides c'est un peu dur pour un traitement de base de données
    Je ne suis pas du tout expert en la matière mais ça me parait fort.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  18. #18
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Tu peux faire une fonction de traitement pour chaque champ et les regrouper dans un tableau et ensuite appeler la fonction correspondantes au numéro du champ, ça évite le switch :
    par exemple :
    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 fn_champ1(void)
    {
    	puts("champ 1");
    	return 1;
    }
    int fn_champ2(void)
    {
    	puts("champ 2");
    	return 2;
    }
     
    typedef int (*MyFonc)(void);
     
    MyFonc TabFonc[] = {fn_champ1, fn_champ2, ......};
    Appel par TabFonc[numero_champ - 1]();
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  19. #19
    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 Trap D
    Une simple remarque, tu n'as pas été très gaté par la personne qui t'a donné les fichiers à récupérer, car ne rien mettre du tout quand les champs sont vides c'est un peu dur pour un traitement de base de données
    Je ne suis pas du tout expert en la matière mais ça me parait fort.
    C'est ce que je me dis également . Quand j'ai dis à mon patron que certains champs n'étaient pas là, il voulait que j'arrête de travailler dessus.. Mais bon j'aime pas rester sur un échec alors j'ai continué comme un mulet . Mais je pense que je vais y arriver, et je pense que grâce à vous des gens pourront comprendre ce que j'ai écrit .

    Mais bon c'est pas pire que la premiere base de données que j'ai du analyser, (la première fois que je voyais une base de données de ma vie haha), avec des champs cryptés, pas de séparateurs, des champs de taille variable... Une vraie horreur celle là aussi. Enfin on s'égare.

    Sinon Mac LAK est ce que tu aurais par hasard un site ou je pourrai trouver des infos sur les analyseurs lexicaux? Pour l'instant sur google je trouve que des trucs pas terribles.

  20. #20
    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
    à tous les "Pros" du goto !!
    1 - Je vous souhaite de ne pas avoir à debugger un programme truffé de ces petites betes
    2 - personnellement je n'ai jamais eu , plus précisement , j'ai toujours pris soint d'éviter le moindre goto dans mes programmes .
    3 - Avec l'experience , je peux vous assurer que cette façon de proceder est la meilleur qui soit.

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

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