J£$µ$ a dit:je fai un programme que je ne pe pa achever car je ne voi pa ou est l'erreur ,voici mon probleme:
if(X==pythagore) goto PYTHAGORE;
.....
float MT,MO,...;
printf("PYTHAGORE: ");
......
merci de m'aider ...
J£$µ$ a dit:mais alor comment faire pour aller dans un programme?????
merci de m'avoir repondue!
alf_zorro a dit:arf, ce n'est pas si dramatique que ça les goto... regardez le code du kernel de OS X... y'en a un peu partout
et puis au final, ça ne change pas grand chose au code compilé. ça demande juste d'être rigoureux.
molgow a dit:Et dans n'importe quel langage autre que le C, le conseil est aussi valable
Il n'est JAMAIS nécessaire d'utiliser un GOTO, on peut toujours faire autrement.
alf_zorro a dit:ça demande juste d'être rigoureux.
Céroce a dit:Pour répondre à Jesus, il te faut créer une étiquette
PYTHAGORE:
à l'endroit où tu veux sauter.
Comme dit plus haut, c'est une très mauvaise habitude d'utiliser un goto. Je ne connais que deux cas intéressant d'utilisation:
for(compteur1 = 0; compteur1 <= 100000; compteur1++)
{
for(compteur2 = 0; compteur2 <= 100000; compteur2++)
{
if( une condition )
goto finBoucle;
}
}
finBoucle:
Le goto est ici la meilleure solution (lisibilité, performances), autrement, il faut retester la condition dans la boucle de compteur1.
Autre cas: quand vous faîtes de la gestion d'erreur, vous sautez directement à la fin dès qu'une erreur apparaît.
Comme le conseille M. Kernighan, il faut par contre absolument éviter les goto pour sauter en arrière.
Céroce a dit:Je ne suis pas d'accord avec vous, dans le sens où il existe souvent UNE solution plus adaptée que toutes les autres à un problème donné.
Si j'évalue que le goto est la meilleure solution à mon problème (encore une fois, c'est rarement le cas), alors je l'utilise. Je ne vais pas m'en priver par _principe_.
entièrement d'accord... d'ailleur heureusement qu'il y a ce genre de post pour me rappeler que ca existe le gotoDidier Guillion a dit:Ce n'est pas un principe, c'est un conseil.
Cela fait pas mal de temps que j'écrit du C tous les jours, 18 ans en fait, et je n'ai jamais trouvé de cas où son utilisation s'imposait. A mon avis, si le goto devient la seule solution, c'est que la structure de ta fonction est mauvaise.
Cordialement
Didier Guillion a dit:Oui, t'a raison, et puis de toute facon les commentaires, ils y sont pas dans le code compilé alors à quoi ca sert d'en mettre ?
Cordialement
alf_zorro a dit:je sens que mon commentaire a été mal pris![]()
heuh moi non plus je n'utilise jamais le goto, et même si j'ai 9 fois moins d'années d'expériences en C que toi, j'ai appris le C en lisant du code noyau, et force est de constater que ce goto est très présent les kernels!
et je suis tout à fait d'accord, il vaut mieux l'éviter, mais pour les gens qui ont commencé par l'assembleur, un goto ou un while,etc..., ça ne change pas grand chose, c'est "juste" une vue de l'esprit, enfin, à mon humble avis.
heuh, grosse parenthèse, en cherchant sur le web ton nom (des fois que tu aurais été un de mes profs à la fac), je suis tombé sur sapiens, c'est le même toi qui l'a fait?
parce que j'adorais ce jeu quand j'étais gamin!
Didier Guillion a dit:Bonjour,
Cela veut peut etre dire que les Kernels ne sont pas tous bien écrit...
Oui, je suis l'auteur de Sapiens, écrit en 6809 sur les Thomsons, reecrit en Z80 pour Amstrad , puis 68000 et C pour la version Atari et enfin 8086 pour la version PC. Ouf !
A l'époque rien n'existait. Quand tu voulais programmer un jeu, tu commencait par t'écrire un assembleur en basic, puis tu reecrivait l'assembleur en assembleur pour que ca aille plus vite, et tu pouvait commencer ton jeu...
Cordialement
AUDIT_ARG(text, pnbuf);
if (pathlen > PSEMNAMLEN) {
error = ENAMETOOLONG;
goto bad;
}
#ifdef PSXSEM_NAME_RESTRICT
nameptr = pnbuf;
if (*nameptr == '/') {
while (*(nameptr++) == '/') {
plen--;
error = EINVAL;
goto bad;
}
} else {
error = EINVAL;
goto bad;