Endlosschleifen - oben oder unten? [geschlossen]

8

Im Geiste von Fragen wie Testen Sie Ihre Schleifen bei oben oder unten? :

Welchen Stil verwenden Sie für eine unendliche Schleife und warum?

  • while (wahr) {}
  • mache {} while (wahr);
  • für (;;) {}
  • label: ... goto label;
CesarB 23.05.2017, 12:32
quelle

19 Antworten

35
%Vor%

Es scheint die Bedeutung der Schleife am effektivsten zu vermitteln.

    
JPrescottSanders 22.10.2008 01:28
quelle
21
%Vor%     
EvilTeach 22.10.2008 01:36
quelle
10
%Vor%     
dsm 22.10.2008 07:18
quelle
9

BITTE KOMMEN VON (23)

    
Harleqin 22.10.2008 01:26
quelle
6
%Vor%

So rolle ich.

    
Paul Nathan 22.10.2008 01:19
quelle
5

Ich verwende den für (;;) Ansatz, weil der MSVC ++ Compiler sich über den While-Loop-Ansatz beschwert:

%Vor%     
jussij 22.10.2008 01:53
quelle
4

Ich bevorzuge while(1) oder while(true) - es ist am klarsten. do { } while(true) scheint wie unnötige Verschleierung. Ebenso kann for(;;) für Leute, die es noch nie zuvor gesehen haben, verwirrend sein, während while(true) sehr intuitiv ist. Und es gibt absolut keinen Grund, label: ... goto label; zu machen, es ist nur verwirrender.

    
Adam Rosenfield 22.10.2008 01:19
quelle
3
%Vor%     
None 22.10.2008 01:30
quelle
3

Unendliche Tail-Rekursion;)

Es ist etwas Compiler-abhängig ...

    
Menkboy 22.10.2008 01:58
quelle
3

Ich verwende for (;;) in Sprachen im C-Stil und while true in Sprachen, die dieses Konstrukt nicht unterstützen.

Ich habe die Methode for (;;) in K & amp; R gelernt und es fühlte sich für mich immer wie idiomatisches C an.

    
Ferruccio 22.10.2008 02:02
quelle
2

Normalerweise verwende ich for(;;) { } , was ich immer für "für immer" halte.

Einige Sprachen bieten ein repeat { } -Konstrukt an, das für immer nativ endlos läuft. Ich finde das for(;;) { } -Konstrukt visuell am ähnlichsten, weil es sich so sehr von dem normalen for() -Konstrukt unterscheidet. Dies ist ein wichtiges Attribut für eine Endlosschleife, die while(1) { } nicht wirklich hat.

    
staticsan 22.10.2008 01:54
quelle
1

Wenn ich Code für mich selbst schreibe, benutze ich für (;;). Andere Leute neigen dazu, durch ihre Syntax verwirrt zu sein und so für Code, den andere Leute sehen / benutzen müssen, verwende ich while (true).

    
Ignacio Vazquez-Abrams 22.10.2008 01:20
quelle
1

offtopic: Wenn Sie darüber nachdenken, was Sie ausdrücken möchten, brauchen Sie normalerweise keine Endlosschleife.

    
Dustin Getz 22.10.2008 01:33
quelle
1

für (;;) ist, was ich normalerweise sehe.

    
Moishe Lettvin 22.10.2008 01:53
quelle
1
%Vor%

Fülltext.

    
moo 22.10.2008 01:56
quelle
1

Lass die Flammen anfangen ...

Wenn die Schleife eine true Endlosschleife ist (dh es gibt keine Unterbrechungsbedingung - nur ein externes Ereignis kann die Ausführung des Threads / process beenden), dann bevorzuge ich die Bezeichnung und goto . Hier ist warum:

Erstens impliziert die Verwendung von while , for und do ... while , dass die Schleife möglicherweise beendet wird. Selbst wenn die Beendigungsbedingung nie erreichbar ist, ist die syntaktische Bedeutung dieser Konstrukte, dass eine Beendigungsbedingung ist.

Zweitens führt die Verwendung eines Schleifenkonstrukts zu einer zusätzlichen Einrückungsebene. Ich hasse Einrückung, die nicht notwendig ist. Es verschwendet wertvolle kolumnare Immobilien.

Drittens ist die einzige wahre Endlosschleife diejenige, die unbedingt zum Anfang der Schleife zurückspringt. Nur goto passt genau zu diesem Zweck.

Die Wahrheit ist, dass es mir nicht wirklich wichtig ist. Sie alle erledigen den Job, und die meisten werden sowieso genau die gleiche Montageanleitung ergeben. Allerdings wird die generierte Assembly höchstwahrscheinlich ein unbedingter Sprung sein (wenn Sie Optimierer sind, ist es einen verdammten Wert), der direkt auf welches C-Konstrukt, Kinder, abbildet? Das ist richtig ... dein alter Freund goto .

    
Dan Moulding 20.11.2009 18:16
quelle
0

Unendliche Schleifen sind eine schlechte Idee, aber in der Praxis hält das nicht immer stand.

Ich bevorzuge while (1) {}, aber stelle sicher, dass etwas in der Schleife dazu führt, dass es ausbricht.

    
Michael McCarty 22.10.2008 01:54
quelle
0

Normalerweise verwende ich while() {} , aber nachdem ich gelernt habe, dass for(;;) {} keine verrückte Syntax ist, werde ich sicher sein, die etwas andere Option zu verwenden.

Unterscheidet Endlosschleifen von tatsächlichen Bedingungen, sehen Sie.

    
SubIgnition 22.10.2008 02:22
quelle
0

Ich bevorzuge jetzt das " for (;;) " - Idiom, weil es mehr "hervorsteht". Früher habe ich das " while (true) " -Idiom verwendet, weil ich dachte, dass es die Absicht besser ausdrückt, aber ich bin umgetauscht, weil ich denke, dass das " for (;;) " -Idiom hinreichend bekannt ist, um die Absicht angemessen auszudrücken durch mehr sichtbar sein.

So wie Stroustrup die neuen Umwandlungen in C ++ absichtlich hässlich gemacht hat - also stehen sie heraus.

    
Michael Burr 22.10.2008 14:35
quelle

Tags und Links