Goto :)

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 - 29 mai 2004 à 12:40
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 - 30 mai 2004 à 12:28
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

Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
29 mai 2004 à 13:16
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.
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
29 mai 2004 à 13:34
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++
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
29 mai 2004 à 14:02
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 (^_^)
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
29 mai 2004 à 14:06
Ou encore :

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

Il me semble que ceci devrait marcher ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
29 mai 2004 à 14:09
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++
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
29 mai 2004 à 14:15
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
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
29 mai 2004 à 14:25
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
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
29 mai 2004 à 14: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++
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
29 mai 2004 à 14:38
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....... :'(
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012 1
30 mai 2004 à 11:54
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++
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
30 mai 2004 à 12:28
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 (^_^)
0