Worauf bezieht sich der Begriff “leere Schleife” genau in C und C++?

Lesezeit: 3 Minuten

Benutzer-Avatar
vidit jain

Ist es so etwas:

for(;;)
 {
   statements;
 }

Oder ist es das:

for(initialisation;condition;updation)
{
}

Ich suche nach Antworten mit Verweisen auf eine Vielzahl von Quellen.

  • Lesen Sie auch: Ist eine (leere) Endlosschleife undefiniertes Verhalten in C?

    – Deduplizierer

    1. Juli 2014 um 12:00 Uhr

Ihr erster Fall (zum mit leeren Ausdrücken) ist ein unendlich Schleife und die zweite (mit leerem Körper der zum Aussage) ist eine leer Schleife

  • Für die Aufzeichnung kann der Körper eines leeren Lops auch explizit weggelassen werden: for(initialisation;condition;updation);

    – Peter Török

    4. Januar 2011 um 9:51 Uhr

  • @Péter Ja, und diese leere Anweisung wird als ‘Null-Anweisung’ bezeichnet. Gilt auch für ‘while’-Anweisungen.

    – Bojan Komazec

    4. Januar 2011 um 10:13 Uhr


  • und die beiden sind nicht mutexiv: for(;;); ist eine leere Endlosschleife!

    – Jakow Galka

    4. Januar 2011 um 10:39 Uhr

In meinem Umfeld ist es so:

for(;;) { statements; }

Endlosschleife

for(initialisation;condition;updation) { } 

leere Schleife

Die Antwort ist kontextabhängig.

Wenn du eine leere meinst zum Schleife, dann

 for(;;)
 {
     statements;
 }

ist so eine sache.

Das Gleiche kann jedoch mit einer While-Schleife erreicht werden:

while(true)
{
    statements;
}

und das ist keine “leere” Schleife. Beides sind Endlosschleifen, aus denen Sie ausbrechen müssen break innerhalb Ihrer Schleife.

Auf der anderen Seite,

for(initialisation;condition;updation)
{
}

Dies ist eine “leere” Schleife, die im Grunde nichts tut, außer vielleicht einige Variablen zu aktualisieren, die vor der Schleife selbst definiert werden könnten.

  • Die letzte for-Schleife könnte viele, viele Dinge tun, weil die update-Anweisung alle möglichen Seiteneffekte haben kann – wenn Sie wollten, könnten Sie den größten Teil Ihrer Anwendung darin stopfen. Aus Sicht der Wartbarkeit rate ich sicherlich davon ab, aber davon auszugehen, dass das letzte ‘grundsätzlich nichts tut’, wenn Sie eine solche Schleife in unbekanntem Code finden, ist sicherlich nicht klug.

    – Inka

    4. Januar 2011 um 10:25 Uhr

  • Ich denke, Sie müssen bearbeiten, Sie behaupten, dass dies der erste ist for Schleife ist sowohl leer als auch nicht leer.

    – abschalten

    4. Januar 2013 um 10:10 Uhr

  • Beispiel für einen Ort, an dem eine leere Schleife etwas bewirken könnte: while( ((c=getchar()) != '\n') && (c != EOF)) {} (wo c ist ein int). Sucht durch stdin bis zum ersten gefundenen Zeilenumbruch oder Streamende.

    – Wyatt Ward

    14. Januar um 19:43 Uhr


Benutzer-Avatar
Mephane

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

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

(Beachten Sie, dass das zweite Beispiel hier auch endlos ist)

Es gibt Fälle, in denen diese nützlich sind, beispielsweise wenn eine Funktion einen gewünschten Nebeneffekt hat und ihren Erfolg zurückgibt und wiederholt werden sollte, bis sie keinen Erfolg hat, beispielsweise um die letzte Zeile in einer Datei zu lesen:

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;
}

Benutzer-Avatar
Samet Atdag

Es entspricht dem:

while (true) {
  statements;
}

Eine unendliche For-Schleife ist eine Schleife, die funktioniert, bis etwas anderes sie stoppt.

  • @Martin, ich habe die Antwort selbst kommentiert, nicht deinen Kommentar – entschuldige die Verwirrung 🙂

    – Peter Török

    4. Januar 2011 um 9:49 Uhr

Benutzer-Avatar
IlGala

for(;;)
 {
   statements;
 }

ist eine Endlosschleife, weil es einen redundanten Wert/Grabage-Wert gibt, der die Schleife wahr macht

for(initialisation;condition;updation)
 {
   body;
 }

ist nur eine Syntax für eine for-Schleife (für Bildungszwecke)

  • @Martin, ich habe die Antwort selbst kommentiert, nicht deinen Kommentar – entschuldige die Verwirrung 🙂

    – Peter Török

    4. Januar 2011 um 9:49 Uhr

1384970cookie-checkWorauf bezieht sich der Begriff “leere Schleife” genau in C und C++?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy