Goto :)

Signaler
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
-
Bonjour,

VOila, j'ai une kestion ki me tarode : l'instruction est elle vraiment a ne pas utiliser ?
Certains codeurs disent kil ne fo surtout pas l'employer, alors ke lorsk je regarde des sources d'excellents programmeurs (BruNews...), j'en vois de tous les cotés !
Voila, si kelkun pouvait eclaircir cette noirceur dans mon esprit...

Merci d'avance !!

++

Alhexman

11 réponses

Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
2
Bon, l'idée généralement répendu sont que les goto sont à éviter parce qu'ils obscurcient le code et le rendent moins compréhensible.

En dehors de ça, il n'y a aucune contrainte technique et tu peut tout à fait les utilisé.

De manière générale, je trouve totalement inutile d'utiliser des goto quand tu peut facilement les remplacer par une boucles while, un break ou autre (utilisation assez courante des goto). Cependant, je ne me gène pas pour en utiliser lors des plusieurs while, if ou else imbriqué qui rend les sorties de boucles parfois relativement compliqué. Un goto est à mon avis bien plus clair dans ces cas là.

Pour BruNews, il me semble (je n'en suis pas tout a fait sur) qu'il les utilise par soucis de performance (le listing ASM généré par des goto étant plus rapide a s'éxécuter).

Seulement, l'optimisation c'est bien, mais force est de constater que dans ce cas c'est totalement inutile. Sachant qu'il faut 50ms au moins pour qu'un être humain se rende compte d'une différence de rapidité, quelques ms gagné (et encore la je suis gentil) ne vont rien changé. A moins qu'il les utilise parce qu'il les juge plus compréhensible, dans ce cas je n'ai rien a dire, chacun est libre de codé comme il le souhaite après tout.

Enfin, ne te prend pas trop la tête la dessus, ce n'est vraiment pas le point le plus important à mon avis, fais comme tu le sens.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Salut,

goto n'est pas specialement 'plus rapide', c'est juste pour forcer le compilo a generer le code qui suit la logique etablie.

exemple de cas ou je trouve que sera bien plus long a ecrire en boucle structuree, lecture complete de fichier:

fromFL:
d = 0; ReadFile(hfl, buff, size, &d, 0);
if(!d) goto outFL; // fichier EOF
// traite donnees dans buff
if(d == size) goto fromFL; // peut en rester
outFL:
CloseHandle(hfl); // ferme fichier

Si qqn veut remplacer cela en structure par boucle mais aussi lisible et concis, je suis preneur.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
2
while(1)
{
d = 0; ReadFile(hfl, buff, size, &d, 0);
if(!d || d != size) break;
}
CloseHandle(hfl); // ferme fichier

Vouala, il me semble que c'est bien plus clair....
Enfin, question de gout sans doute (^_^)
Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
2
Ou encore :

d = size;
while(d && d == size) ReadFile(hfl, buff, size, &d, 0);
CloseHandle(hfl);

Il me semble que ceci devrait marcher ^^
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Faut vraiment que ce soit 'question de gout'.

while(1), ses accolades, ses indentations de code et ses break contre fromFL ....

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
2
Dans le deuxieme cas, aucun accolade, aucune indentation, aucun break
Un simple while qui remplace "fromFL:", "goto outFL;", "goto fromFL;", et "outFL:"

Le seul truc qui change à chaque fois, c'est que je n'initialise pas la variable d dans la boucle, mais je ne pense pas que ceci soit important

Bref, que tu n'aime pas le premier exemple, je peut a la rigueur comprendre, le deuxieme quand à lui tien sur 3 ligne et est bien plus simple
Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
2
et encore, on peut simplifié le while, puisque si d==size, d est forcément != de 0, donc :

d = size;
while(d == size) ReadFile(hfl, buff, size, &d, 0);
CloseHandle(hfl);

Mais bon, la je chipote
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
ben non la derniere version, faut traiter les donnees, accolades et tout le cirque deviennent obligatoires.
Et puis le compilo finira par ecrire des goto (JMP asm) alors autant que je les mette moi meme ou j'ai decide.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
2
C'est vrai que si l'on doit rajouter du code, l'ajout des accolades est obligatoire, 1 point pour toi

Mais au risque de paraitre borné, il me semble que le code est avant tout fait pour l'homme, pas pour l'ordinateur, la compréhension est à mon avis plus importante.

Enfin, on n'arrivera pas à se mettre d'accord dessus, alors autant mettre fin à la discussion tout de suite (>_<)
Sur ce, j'm'en vais tailler les haies de mon jardin....... :'(
Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
Bonjour,

Excusez-moi de m'initier dans la conversation mais il y a quelque chose sui me choque :

"Mais au risque de paraitre borné, il me semble que le code est avant tout fait pour l'homme, pas pour l'ordinateur, la compréhension est à mon avis plus importante."

Est-ce l'homme qui éxecute les instructions et fait le boulot du proc ?

Il me semble qu'il faut écrire le code pour la machine pour que se soit pour lui plus facile, rapide, ... et pas pour l'homme qui en plus ne verra jamais le à part le développeur qui doit savoir ce qu'il fait...

@+
Arnotic,
Admin CS, MVP Visual C++
Messages postés
515
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
27 avril 2006
2
Oui et non, si tu ne garde ton code que pour toi, que tu est sur de t'y retrouvé n'importe quand (même longtps après avoir écrit le code), alors rien ne t'empèche de faire un code super optimisé et compliqué (et tant qu'a faire, autant le faire en ASM, comme ça on est sur que personne comprend) ...

Mais je vais prendre un exemple : moi. Je fait malheureusement du code parfois réelement immonde, et ça m'est déja arrivé de me retrouver un peu coincé sur un code que j'avais moi-même écrit 1 ans avant... J'imagine même pas ce que ca donnerai si c'ést quelqu'un d'autre que moi qui se penche dessus !

De plus, dès que ton code est suceptible d'être lu par d'autre personnne ou que tu participe à un projet commun, faut tout de même faire un effort de compréhension du code.
L'ordinateur arrivera a comprendre ton code tant qu'il n'y a pas d'erreur, un être humain non,

M'enfin, je dis ça mais je sais pertinament que je ne suis pas un bon exemple (^_^)