2011-01-04 8 views
16

Ist es diese Art der Sache:Worauf bezieht sich der Begriff "leere Schleife" genau in C und C++?

for(;;) 
{ 
    statements; 
} 

Oder ist es das:

for(initialisation;condition;updation) 
{ 
} 

ich nach Antworten mit Verweisen auf einer Vielzahl von Quellen suchen.

+0

Lesen Sie auch: [Ist eine (leere) Endlosschleife undefiniertes Verhalten in C?] (http: // stackoverflow.com/questions/15595493/ist-eine-leere-unendliche-Schleife-undefiniert-Verhalten-in-c) – Deduplicator

Antwort

26

Ihr erster Fall (für mit leeren Ausdrücke) ist eine unendlich Schleife und die zweiten (mit leeren Körper der für statement) ist eine leer Schleife

+4

Für den Datensatz kann der Körper eines leeren lop auch explizit weggelassen werden: 'für (Initialisierung; Bedingung; Aktualisierung) ; ' –

+0

@ Péter Ja, und diese leere Anweisung wird als 'Nullanweisung' bezeichnet. Gilt auch für "while" -Anweisungen. –

+4

und die beiden sind nicht Mutexive: 'for (;;);' ist eine leere Endlosschleife! – ybungalobill

4

In meiner Umgebung es das ist wie:

for(;;) { statements; } 

Endlosschleife

for(initialisation;condition;updation) { } 

leer Schleife

2

Es ist gleich, dass:

while (true) { 
    statements; 
} 

Infinite for-Schleife ist eine Schleife, die bis etwas hält es funktioniert anders.

+1

Das ist eine * unendliche * Schleife, keine leere ... –

+0

@Martin, ich habe die Antwort selbst kommentiert, nicht Ihren Kommentar - Entschuldigung für die Verwirrung :-) –

+0

Danke, bearbeitete Antwort. –

2

Antwort ist kontextabhängig.

Wenn Sie eine leere für Schleife bedeutet, dann

for(;;) 
{ 
    statements; 
} 

ist so eine Sache.

Obwohl kann die gleiche Sache mit einer while-Schleife erreicht werden:

while(true) 
{ 
    statements; 
} 

und das ist nicht eine „leere“ Schleife. Beide sind Endlosschleifen, die Sie aus der Verwendung von break innerhalb Ihrer Schleife brechen müssen.

Auf der anderen Seite,

for(initialisation;condition;updation) 
{ 
} 

ist dies eine „leere“ Schleife, die bascially nichts tut, außer vielleicht einige Variablen aktualisieren, die vor der Schleife selbst definiert werden.

+0

Die letzte for-Schleife könnte sehr viele Dinge tun, da die update-Anweisung alle möglichen Nebenwirkungen haben kann - wenn Sie möchten, könnten Sie die meisten Ihrer Anwendungen darin stopfen. Ich rate sicherlich von der Wartbarkeit Sicht dagegen, aber unter der Annahme, dass das letzte "im Grunde nichts tut", wenn Sie eine solche Schleife in unbekannten Code finden, ist sicherlich nicht klug. – Inca

+0

Ich denke, Sie müssen bearbeiten, Sie behaupten, dass die erste 'for'-Schleife leer und nicht leer ist. – unwind

1

Eine leere Schleife ist eine Schleife, die einen leeren Körper, z.B.

for(int i = 0; i < 10; ++i) {} 
while(cin) {} 

(beachten Sie, dass das zweite Beispiel hier auch endlos sein geschieht) sind

Es gibt Fälle, wo diese nützlich sind, zum Beispiel, wenn eine Funktion hat einen Nebeneffekt gewünscht und gibt seinen Erfolg und sollte B. bis zum Lesen der letzten Zeile in einer Datei:

std::string getLastLine(std::string filename) 
{ 
    std::ifstream in(filename.c_str()); 
    if(!in) 
    return ""; 

    std::string line; 
    while(std::getline(in, line)); // empty loop, the operation returns the condition 
    return line; 
} 
Verwandte Themen