Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
867 connectés 

  FORUM HardWare.fr
  Programmation

  Comment justifier l'emploi de goto/label dans un prog ?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Comment justifier l'emploi de goto/label dans un prog ?

n°88239
BigBrother
pulse powered - useless post
Posté le 10-01-2002 à 21:10:31  profilanswer
 

Sachant que la raison officieuse c pour eviter des enormes boucles chiantes :D ?

mood
Publicité
Posté le 10-01-2002 à 21:10:31  profilanswer
 

n°88240
bardass
TEUBDEFER
Posté le 10-01-2002 à 21:13:24  profilanswer
 

ça se justifie pas, c'est programmé avec les pieds


---------------
à mon âge, on ne me suce plus, on me mâche
n°88241
Tetedeienc​h
Head Of God
Posté le 10-01-2002 à 21:13:59  profilanswer
 

GOTO / LABEL , mon pere programme qu'avec ca.
 
Bon  OK, il programme en Basic sur MO6, mais bon :D


---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
n°88242
scOulOu
Born Under Saturn
Posté le 10-01-2002 à 21:14:13  profilanswer
 

"ckomsaéfépachié"

n°88243
botman
Cubeur
Posté le 10-01-2002 à 21:17:44  profilanswer
 

et vive les spaghettis :jap:


---------------
"OCPLB : On Casse Pas Le Binôme, 'moiselle Jade, Carlson & Peters, page 823 !"
n°88244
Maldoror
Carpe diem, tu vas mourir
Posté le 10-01-2002 à 21:19:00  profilanswer
 

bardass a écrit a écrit :

ça se justifie pas, c'est programmé avec les pieds  




 
ah bon ?
Pourtant moi je mets des EXIT partout dans mes progs Delphi !! :D

n°88245
botman
Cubeur
Posté le 10-01-2002 à 21:21:18  profilanswer
 

et moi j'oublie toujours d'effacer mes pointeurs en C :jap: :sol:


---------------
"OCPLB : On Casse Pas Le Binôme, 'moiselle Jade, Carlson & Peters, page 823 !"
n°88246
minusplus
Posté le 10-01-2002 à 21:21:58  profilanswer
 

justification  ? -> optimisation du code ! :D

n°88247
Tilys
Heartbreaker
Posté le 10-01-2002 à 21:23:34  profilanswer
 

goto c koa ça goto  :??:


---------------
Donne invitations pour gmail - Je n'aime pas les cons et je n'ai pas envie de leur parler.
n°88248
minusplus
Posté le 10-01-2002 à 21:25:46  profilanswer
 

Tilys a écrit a écrit :

goto c koa ça goto  :??:  




 
c JMP en plus simple ! :D

mood
Publicité
Posté le 10-01-2002 à 21:25:46  profilanswer
 

n°88249
BigBrother
pulse powered - useless post
Posté le 10-01-2002 à 21:29:25  profilanswer
 

minusplus a écrit a écrit :

justification  ? -> optimisation du code ! :D  




 
jolie excuse, copier/coller vers le rapport de projet !! :lol:  :lol:

n°88250
bardass
TEUBDEFER
Posté le 10-01-2002 à 21:29:31  profilanswer
 

Maldoror a écrit a écrit :

 
 
ah bon ?
Pourtant moi je mets des EXIT partout dans mes progs Delphi !! :D  




 
tu fais du delphi maintenant ? :ouch:
même si c'est avec les pieds, c'est un bel effort :jap:


---------------
à mon âge, on ne me suce plus, on me mâche
n°88251
Maldoror
Carpe diem, tu vas mourir
Posté le 10-01-2002 à 21:31:53  profilanswer
 

Depuis quelques temps ouais :D
J'ai pratiquement laissé tomber le langage en 16 bits sous lequel je développais jusque là depuis 4 ans :sol:

n°88252
Tilys
Heartbreaker
Posté le 10-01-2002 à 21:33:25  profilanswer
 

minusplus a écrit a écrit :

 
 
c JMP en plus simple ! :D  




 
merci j'aurai du préciser que ct du 2n° dsl de pas l'avoir fait  ;)


---------------
Donne invitations pour gmail - Je n'aime pas les cons et je n'ai pas envie de leur parler.
n°88253
bardass
TEUBDEFER
Posté le 10-01-2002 à 21:34:50  profilanswer
 

Maldoror a écrit a écrit :

Depuis quelques temps ouais :D
J'ai pratiquement laissé tomber le langage en 16 bits sous lequel je développais jusque là depuis 4 ans :sol:  




 
t'as aussi laissé tomber les cartes perforées :??:


---------------
à mon âge, on ne me suce plus, on me mâche
n°88254
Maldoror
Carpe diem, tu vas mourir
Posté le 10-01-2002 à 21:39:45  profilanswer
 

Ah ben voui, ça j'en ai eu au permis de conduire !! :D

n°88255
minusplus
Posté le 10-01-2002 à 21:41:09  profilanswer
 

Tilys a écrit a écrit :

 
 
merci j'aurai du préciser que ct du 2n° dsl de pas l'avoir fait  ;)  




:lol: je m'en doutais ! :D
 
 
(c t juste poor étaler ma science encyclopédique sur le sujet ! :sol: :D)

 

[edtdd]--Message édité par minusplus--[/edtdd]

n°88256
Tilys
Heartbreaker
Posté le 10-01-2002 à 21:44:02  profilanswer
 

minusplus a écrit a écrit :

 
:lol: je m'en doutais ! :D
 
 
(c t juste poor étaler ma science encyclopédique sur le sujet ! :sol: :D)  
 
 




 
ok ok je voyais arriver une réponse de se type
goto next topic  :D


---------------
Donne invitations pour gmail - Je n'aime pas les cons et je n'ai pas envie de leur parler.
n°88257
minusplus
Posté le 10-01-2002 à 22:38:41  profilanswer
 

:lol: :lol:

n°88259
JDF
Posté le 10-01-2002 à 23:08:01  profilanswer
 

scOulOu a écrit a écrit :

"ckomsaéfépachié"  




 
 :heink:


---------------
Mon topic achats/ventes
n°88260
antp
Super Administrateur
Champion des excuses bidons
Posté le 11-01-2002 à 09:49:56  profilanswer
 

Maldoror a écrit a écrit :

 
 
ah bon ?
Pourtant moi je mets des EXIT partout dans mes progs Delphi !! :D  




 
exit c'est pas un goto hein ; exit c'est plutôt un return...
y a pas de problème à utiliser exit (bien que j'essaie de pas trop l'employer).


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°88262
ddr555
Posté le 11-01-2002 à 09:53:54  profilanswer
 

un goto c'est sale, une vraie usine à gaz, moi j'ai déjà vu ça au milieu d'une boucle while, impossible à débugguer  :fou:  :fou:  :fou:

n°88263
OverFlow
Qui es-tu Justicier ?
Posté le 11-01-2002 à 09:57:29  profilanswer
 

au moins ca justifieras le fait que PERSONNE sinon toi pourra le retravailler tellement ca va être un plan de nouille :lol:


---------------
Fan de GodBout et de Meuh
n°88264
ddr555
Posté le 11-01-2002 à 09:59:16  profilanswer
 

OverFlow a écrit a écrit :

au moins ca justifieras le fait que PERSONNE sinon toi pourra le retravailler tellement ca va être un plan de nouille :lol:  




 
oui, mais même là, celui qui avait fait ça ne savait pas le débugguer  :D

n°88277
axey
http://www.00f.net
Posté le 11-01-2002 à 10:20:54  profilanswer
 

Je ne vois pas ce qu'il y a de mal a utiliser 'goto', au contraire. Cela permet de sortir rapidement de plusieurs boucles sans passer par des immondes acrobaties genre variables 'est_ce_kil_faut_sortir_de_la_boucle' testees partout.
 
Les 'goto' permettent aussi d'eviter des niveaux d'indentation trop importants (sans sombrer dans la ridicule non-optimisation consistant a creer des fonctions qui ne sont appellees qu'a un seul endroit du programme) .
 
Une fois compile, un programme est compose en moyenne de 70% de goto ('jmp', 'bra', 'jump', etc) . Un 'if' se traduit par un goto. Un 'else' aussi. Un 'while' aussi. Un 'break' aussi. Un 'switch' aussi. Un 'return' avant la fin de la fonction aussi. La seule difference est que ces mot-clefs ne nomment pas les labels. C'est anonyme, implicite d'apres les acollades. Et souvent plus beaucoup plus flou qu'un simple 'goto ya_pu_de_memoire_on_se_casse' (qui ne bouffe pas de memoire et/ou registre inutilement) .
 
Ceux qui se revoltent contre les 'goto' ne savent simplement pas coder. Ils font du code 'propre' c'est a dire 10 fois plus long et lent que necessaire, sans avoir la moindre idee de ce qu'execute le CPU derriere.
 
A titre indicatif, le code source du noyau Linux comporte 14624 'goto' (grep -r goto /usr/src/linux | wc -l dans version 2.5.2-pre9) . Celui d'OpenBSD (3.0) en comporte 26138. Pourtant des milliers de gens travaillent dessus sans probleme. Mais ce sont des codeurs, pas des programmeurs. Pour un truc necessitant d'etre compact et rapide, se forcer a ne jamais utiliser 'goto' est de la debilite pure (ou c'est juste pour repeter betement ce qu'un prof a dit).


---------------
C'est en forgeant qu'on devient con comme un forgeron.
n°88302
Krueger
tout salaire demande dutravail
Posté le 11-01-2002 à 11:18:28  profilanswer
 

Personnellement je vois goto comme un sorte de try/catch en Java et C++. Pas vous?
 
axey > Trop de goto risque de rendre le code difficile à maintenir. Il faudrait donc trouver un équilibre, non?

 

[edtdd]--Message édité par Krueger--[/edtdd]


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°88310
Twixy
Posté le 11-01-2002 à 11:37:44  profilanswer
 

-> code spaghetti
 
euh "bande de pédé" , c'est sur blabla  :D


---------------

n°88319
kadreg
profil: Utilisateur
Posté le 11-01-2002 à 12:02:15  profilanswer
 

Je ne vois pas ce qu'il y a de mal a utiliser 'goto', au contraire. Cela permet de sortir rapidement de plusieurs boucles sans passer par des immondes acrobaties genre variables 'est_ce_kil_faut_sortir_de_la_boucle' testees partout.
 
Toutafé, mais il s'agit ici de l'émulation d'une exception, c'est faisable dans des langages qui ne disposent pas de ce mécanisme, mais c'est uniquement dans ce cas que je les accepterais.
 
Les 'goto' permettent aussi d'eviter des niveaux d'indentation trop importants (sans sombrer dans la ridicule non-optimisation consistant a creer des fonctions qui ne sont appellees qu'a un seul endroit du programme) .
 
Il n'y a pas que l'optimisation en vitesse qui est importante, mais quand tu te retrouve face à un code monstrueux, bonjour le temps de comprendre ce qui se passe. Une fonction qui n'est appelée qu'une fois ne me gène absolument pas (un compilateur intelligent va d'ailleurs l'expenser normalement), et cela permet à la fonction qui appelle cette fonction d'être relue plus facilement, car plus courte.  
 
Je préfère 100 fois un appel a une fonction : compute_maximal_machin que la fonctione expensée au beau milieu.
 
Accessoirement, si tu tiens à optimiser du code, je conseille la lecture d'un article paru dans LMF il y a deux mois sur l'optimisation de code C afin de tirer parti des pipelines des processeurs modernes. Interressant et sans goto :)
 
Une fois compile, un programme est compose en moyenne de 70% de goto ('jmp', 'bra', 'jump', etc) .
 
Si on a inventé des langages de haut niveau, c'est justement pour s'abstraire du coté spaghetti de ce genre de programme. Dans ce cas, pourquoi ne pas carrément debugger à l'oscillo. En effet, ces mnémoniques seront converti en courant électrique au sein du processeur.
 
Ceux qui se revoltent contre les 'goto' ne savent simplement pas coder. Ils font du code 'propre' c'est a dire 10 fois plus long et lent que necessaire, sans avoir la moindre idee de ce qu'execute le CPU derriere.
 
Oh, un véritable. Mais dans quel pourcentage des développements le gain est-il réellement interressant par rapport aux emmerdes derrière ? Quand j'écris du code, je sais que sa durée de vie (aka exploitation du programme) est de l'ordre de 10 à 15 ans, et que en cas de remontée de bug, quelqu'un (généralement un nouveau) va devoir mettre son nez dedans. Je préfère lui épargner de passer 3 jours dans un truc incompréhensible.
 
A titre indicatif, le code source du noyau Linux comporte 14624 'goto' (grep -r goto /usr/src/linux | wc -l dans version 2.5.2-pre9) . Celui d'OpenBSD (3.0) en comporte 26138. Pourtant des milliers de gens travaillent dessus sans probleme.
 
Le noyau d'un système d'exploitation est un cas particulier quand même. Deja, il y en a partie en assembleur (arch), ensuite il est en C dans les couches aux dessus, et je l'ai déjà dit, je suis pas spécialement contre une emulation des exceptions. Ensuite, une optimisation TRES poussée dans cette partie là peut vraiment valoir le coup, vu l'appel continuel à deschoses à la VM. De la même façon que si tu programmes pour une ROM, une optimisation en taille très poussée peut apporter des choses aussi.
 
 
Mais ce sont des codeurs, pas des programmeurs.
Elitisme p0w4h !
 
Pour un truc necessitant d'etre compact et rapide, se forcer a ne jamais utiliser 'goto' est de la debilite pure (ou c'est juste pour repeter betement ce qu'un prof a dit).
 
Es-ce tous les cas de programmations ? Loin de la. Aussi dire que le goto c'est bien,; c'est formidable, mangez-en vous serez un veritable(c), c'est du même acabit que ce que tu entends dénoncer.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°88326
LeGreg
Posté le 11-01-2002 à 12:29:15  profilanswer
 

moi j'ai utilise des goto dans ma vie
(quand je bossais sur amstrad CpC)
 
sinon j'ai utilise goto recemment
en C++ mais strictement limite
a une procedure sur un projet perso
pour parser rapidement une chaine.
mais c'est par paresse
et je crois que c'etait rendu
tellement simple par le goto
que je n'aurais pas de mal a revenir dessus.
 
A+
LEGREG

n°88329
LeGreg
Posté le 11-01-2002 à 12:33:34  profilanswer
 

sinon la doc msdn ils ont une autre justification a vous de voir:

Citation :

It is good programming style to use the break, continue, and return statement in preference to goto whenever possible. Since the break statement only exits from one level of the loop, a goto may be necessary for exiting a loop from within a deeply nested loop.


C'est pareil pour les exceptions il y a des gens
qui trouvent qu'utiliser des exceptions pour gerer
le flux normal d'un programme rend la chose difficile
a suivre et contraire a l'esprit des exceptions.
 
A+
LEGREG

n°88371
BigBrother
pulse powered - useless post
Posté le 11-01-2002 à 14:40:42  profilanswer
 

ca peut etre propre un goto sur un prog de 340lignes, yen a 4/5. c meme pas pour des appels de fct mais pluto des retours  dans une execution lineaire. Dans ca cas je vois pas ou est le mal a les employer. sur que si c pour emplacer 3 boucles FOR imbriquées c porc, mais qd c pas ce genre de cas ya pas de prob a mon avis.
 

Citation :

Dans ce cas, pourquoi ne pas carrément debugger à l'oscillo ?


 
Tres bonne idée !!! :lol:  :lol:  :lol:  :lol:

n°88376
JPA
Posté le 11-01-2002 à 14:57:17  profilanswer
 

Je veux pas f.... mon bordel, mais j'ai rien trouvé d'autre dans les progrs en batch !!! :lol:
En assembleur, on utilise pas goto mais des jump, ce qui revient au même...

n°88384
LeGreg
Posté le 11-01-2002 à 15:26:07  profilanswer
 

[boulet]
tip de programmation:
Pour se deplacer dans un programme
le plus rapide c'est tout de meme le runto
mais il est deconseille
surtout dans les pools (plantage assure)
tout bon programmeur preferera donc
la methode walkto bien plus safe.
[/boulet]
 
A+
LEGREG

n°88406
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 11-01-2002 à 16:15:44  profilanswer
 

label goto selon moi n'a qu'une seule utilisation. Lorque tu es dans une double boucle et que tu souhaites sortir des deux boucles d'un coup
 
genre
 
while ...
{
   ///
   while ...
   {
    ...// Aller là (1)
   }
   ...
}
// Venir ici (1)
 
A+


---------------
What is popular is not always right, what is right is not always popular :D
n°88434
antp
Super Administrateur
Champion des excuses bidons
Posté le 11-01-2002 à 17:40:06  profilanswer
 

tiens je viens de lire un truc dans la doc de Delphi : on ne peut pas faire un goto hors de la fonction dans laquelle on est :

Code :
  1. procedure p1;
  2. begin
  3.   goto ailleurs;
  4. end;
  5. procedure p2;
  6. begin
  7.   ailleurs:
  8. end;


 
N'est pas accepté par le compilateur. Il faut déclarer les labels :

Code :
  1. procedure p1;
  2. label
  3.   ailleurs;
  4. begin
  5.   goto ailleurs;
  6.    ...
  7.   ailleurs:
  8.    ...
  9. end;


et si on déclare le label sans l'utiliser ça provoque aussi une erreur.
 
En C ça se passe comment ? Y a pas toutes ces restrictions il me semble.

 

[edtdd]--Message édité par antp--[/edtdd]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°88437
LeGreg
Posté le 11-01-2002 à 17:53:42  profilanswer
 

antp a écrit a écrit :

tiens je viens de lire un truc dans la doc de Delphi : on ne peut pas faire un goto hors de la fonction dans laquelle on est :
En C ça se passe comment ? Y a pas toutes ces restrictions il me semble.  




 
En C, il faut faire ton goto
a l'interieur de ta fonction.
 
Il y a le mecanisme longjmp (nonlocal goto)
qui permet de faire des sauts
plus lointains mais qui fonctionne
differemment du goto
c'est a dire qu'il faut d'abord memoriser un point
d'execution avant de pouvoir faire une  
sorte de flashback a ce point.
 
L'utilisation du longjmp est deconseille pour
tout sauf pour gerer un mecanisme d'exceptions en C.
Et il est deconseille pour tout en C++
(puisque les exceptions existent et que longjmp
ne respecte aucune convention du C++).
 
A+
LEGREG

n°88439
LeGreg
Posté le 11-01-2002 à 17:56:50  profilanswer
 

DarkLord22 a écrit a écrit :

label goto selon moi n'a qu'une seule utilisation. Lorque tu es dans une double boucle et que tu souhaites sortir des deux boucles d'un coup




 
hop ca a deja ete dit ;)
 
LEGREG
ps: mais je suis bien d'accord que c'est parfois
lourd de lire toute la discussion

n°88440
Bruce
Music 4 your ears!
Posté le 11-01-2002 à 18:00:53  profilanswer
 

DarkLord22 a écrit a écrit :

label goto selon moi n'a qu'une seule utilisation. Lorque tu es dans une double boucle et que tu souhaites sortir des deux boucles d'un coup
 
genre
 
while ...
{
   ///
   while ...
   {
    ...// Aller là (1)
   }
   ...
}
// Venir ici (1)
 
A+  




 
Mouai, et encore c limite... Franchement les break et continue sont plus simples ! Tu veux le forcer à sortir des 2 boucles ? Tu met la condition de sortie de la boucle la plus large sur vraie et tu fait un break dans la boucle ou tu est ! Zooo dehors :p


---------------
A+++ Bruce - http://www.bheller.com
n°88560
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 12-01-2002 à 10:30:31  profilanswer
 

Bruce a écrit a écrit :

 
Tu met la condition de sortie de la boucle la plus large sur vraie et tu fait un break dans la boucle ou tu est ! Zooo dehors :p  




Ca c'est du bidouillage à la 6-4-2 pour éviter d'utiliser un goto c'est tout  :fuck:

 

[edtdd]--Message édité par DarkLord22--[/edtdd]


---------------
What is popular is not always right, what is right is not always popular :D
n°88561
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 12-01-2002 à 10:32:08  profilanswer
 

legreg a écrit a écrit :

 
 
hop ca a deja ete dit ;)
 
LEGREG
ps: mais je suis bien d'accord que c'est parfois
lourd de lire toute la discussion  




 
Oups désolé  :ange:


---------------
What is popular is not always right, what is right is not always popular :D
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Comment justifier l'emploi de goto/label dans un prog ?

 

Sujets relatifs
Urgent prog PASCALlancer un prog a la connexion...
[Delphi] Couleur: memobox et labelProg de la Telecommande de la PCTV Pinnacle
[Unix/Programmation Shellscript] Aide pour une question de Progc pas vraiment de la prog mais bon...
heeelp prog en Cpt pb de prog en VB
[C++] PrOg sympa ?Probleme prog en ligne de commande C++ / Telnet
Plus de sujets relatifs à : Comment justifier l'emploi de goto/label dans un prog ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR