Bonjour est ce que goto est propre a c++ ou non ?
Bonjour est ce que goto est propre a c++ ou non ?
Salut,
Le mot cl� goto a �t� h�rit� du C, et son usage est fortement d�conseill�. En C++, il y a toujours moyen de s'en passer.
Meilleures salutations
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
non, bien au contraire. C'est un h�ritage de la programmation procedurale de l �poque.
Y'a quand m�me UN cas de figure en C/C++ o� le goto est int�ressant: une sorte de 'break' pour sortir de multiples boucles.
Certes des alternatives existent, mais c'est plus lent...
Exemple: rechercher un �l�ment dans une matrice
La preuve que c'est vraiment utile: la syntaxe du Java autorise au 'break' de sortir d'une boucle multiple
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5 for (int i=0; i<M; ++i) for (int j=0; j<N; ++j) if (A[N*i+j]==a) goto found; found:;
Bof, je pr�f�re, de loin :Envoy� par Charlemagne
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7 int find(T A[], int N, int M, T a) { for(int i = 0; i < M; ++i) for(int j = 0; j < N; ++j) if (A[N*i + j] == a) return N*i + j; return -1; }
Pareil.
Bof. A moins d'�tre en temps r�el, je ne vois vraiment pas l'int�r�t de se passer de constructions plus propres.Certes des alternatives existent, mais c'est plus lent...
Le principe utilise dans cette preuve me laisse un peu songeur...Envoy� par Charlemagne
Moi aussi, je pr�f�re un return, mais c'�tait un exemple � la con...Envoy� par Sylvain Togni
Bof. A moins d'�tre en temps r�el, je ne vois vraiment pas l'int�r�t de se passer de constructions plus propres.Arr�tez de me critiquer, ou bien critiquez donc �galement Stroustrup.Le principe utilise dans cette preuve me laisse un peu songeur...
Je le cite de son bouquin, sur le paragraphe consacr� au 'goto':
D�j� lu un bouquin de C?(...) Un goto peut �galement �tre important dans les cas rares pour lesquels une efficacit� optimale est indispensable (...)
L'une des applications les plus judicieuses de cette instruction consiste � sortir d'une boucle imbriqu�e ou d'une instruction switch (un break ne permet de remonter qu'un seul niveau de boucle ou d'instruction switch). Par exemple (...)
Stroustrup cite Java?
Plus s�rieusement, l'usage de goto pour cette t�che se d�fend m�me si je ne partage pas cet opinion.
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Envoy� par Charlemagne
Ca va mieux maintenant?
Il n'ecrit rien de semblable aou bien critiquez donc �galement Stroustrup.
Je le cite de son bouquin, sur le paragraphe consacr� au 'goto':
Raisonnement que je continue a trouver tres douteux, quelle que soit mon opinion sur les goto et la possibilite de sortir de plusieurs boucles en meme temps.Envoy� par Charlemagne
Tu as deja lu mes messages sur le forum C?D�j� lu un bouquin de C?
Voici le lien vers un d�bat au sujet de l'instruction goto qui a eu lieu sur le forum C: http://www.developpez.net/forums/showthread.php?t=75764
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Eternelle pol�mique.Envoy� par Maria1505
Je sugg�rrais de s'initier � l'assembleur x86....
m�me si il n'y a aucun goto dans ton code source en C++ eh bien ton programme une fois compil� cela donnera toujours des jmp,je etc...
Les sauts ne sont ni plus ni moins que des goto en ASM.
Ceci dit il faut �viter d'utiliser goto c'est certain
exemple en C
int a=16;
if (a==20) FaireQQueChose()
En ASM cela va donner
mov ax,10h
cmp ax,10h
je adresse_FaireQQueChose
donc en langage machine cela donnera un goto ...
![]()
goto pose pas des probl�mes �vidents face au RAII ?
Je ne vois rien. A moins que tu parles des limitations sur les cibles des goto en C++ qui font qu'on ne peut pas sauter un constructeur?Envoy� par loufoque
J'avoue avoir tr�s peu utilis� goto en C++, je ne sais donc pas quelles en sont les restrictions.
Je pensais que c'�tait comme en C. (Mais bon, en C non plus je connais pas parfaitement)
C'est moche et �a n'est pas beaucoup plus rapide que d'utiliser une condition de sortie de boucle:Envoy� par Charlemagne
Ensuite si tu tiens vraiment � optimiser ce type de chose, commence par utiliser une boucle simple plut�t qu'une double boucle
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 bool found = false; for (int i=0; (i<M) && (!found); ++i) { for (int j=0; j<N; ++j) { if (A[N*i+j]==a) found = true; } }
Maintenant, si tu poss�des la STL c'est tout aussi performant et plus lisible d'utiliser
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 for (int i=0; (i < M*N) && (!found); ++i) { if (A[N*i+j]==a) found = true; }
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 find(A, A+(M*N), a);
C'est un peu plus long en temps de calcul � ta mani�re,Envoy� par Jan Rendek
et franchement je trouve le goto plus �l�gant.
C'est hors de propos: Tu peux effectivement ici ne faire qu'une boucle, mais c'�tait un exemple � la con pour illustrer une boucle imbriqu�e... rien de plus.Envoy� par Jan Rendek
Dans ce cas d'une boucle simple, t'aurais d� plut�t utiliser un 'break'.
Tu peux toujours faire part de tes remarques � Stroustrup... que visiblement tu prends �galement pour un imb�cile.
Jan Rendek, si le goto est completement futile, pourquoi bigre fait-il parti du langage, nom de dieu !?
et derniere petite remarque, car bcp de choses ont d�ja �t� dites ; en assembleur, le "goto" est indispensable, car toutes les boucles fonctionnent avec ca !
voila, de mon avis perso, c'est pas propre du tout a utiliser, et c'est meme a proscrire, mais ne sois pas faschiste, il existe des cas ou l'on cherche l'optimisation et les performances, et il devient tres utile.
je rapelle que pour programmer haut niveau, il existe des langages meilleurs que le C/C++, mais que ceux ci en revanche ont une place manifeste dans les langages bas niveau et dans l'informatique industrielle.
Encore un argument que je ne comprend pas. Pourquoi auto fait-il partie du langage?Envoy� par toxcct
pour faire parler les cons ?Envoy� par Jean-Marc.Bourguet
![]()
serieusement, il est la parce que le standard ne dit pas comment l'ex�cution doit allouer une variable par d�faut, et si un compilo veut mettre une variable dans le registre, rien ne lui empechera, sauf si on explicite "auto"
ps: que je ne fasse pas jeter de pierres, je ne parlais pas pour toi JM![]()
Partager