2 Stimmen

0 in der while-Anweisung

Ich habe eine Frage und bitte helfen Sie mir.Ich habe auf der Webseite etwas über do while-Anweisung gelesen, anders ist, dass in while 0 geschrieben wird, nicht boolesche Bedingung

do{
   // do some instruction
}while(condition );

ist klar verständlich, aber diese

 do
  {
    //again some instruction
  }while(0);

Ich kann nicht erraten, was es tut?ist es Äquivalenz es zu diesem: etwas tun, während (false)?oder vielleicht ist es Unendlichkeitsschleife?bitte helfen Sie mir

6voto

cnicutar Punkte 173420

Er macht etwas nur einmal. Sie ist häufig in Makros verwendet um Aussagen zu gruppieren und die Verwendung natürlicher zu gestalten (d.h. ein abschließendes Semikolon zu verlangen).

Jeder Compiler, der etwas taugt, sollte die do while vollständig ignorieren und nur die eingeschlossenen Anweisungen ausführen.

3voto

Doc Brown Punkte 19104

Obwohl diese "Schleife" nur einmal ausgeführt wird, kann man sie auf diese Weise verwenden:

do
{
  // declare some local variables only visible here
  // do something

  if(TestSomeConditions())
      break;

  // do something more
  // destructors of local variables run here automatically
}while(0);

IMHO ist es in den meisten Fällen besser, dies in einer strukturierteren Weise umzuschreiben, entweder auf diese Weise

  // do something
  if(!TestSomeConditions())
  {
      // do something more
  }

oder durch Einführung einer separaten Funktion, die den ursprünglichen Anwendungsbereich widerspiegelt:

  void MyFunction()
  {
      // declare some local variables only visible here
      // do something

      if(TestSomeConditions())
          return;

      // do something more
  }

1voto

Die do while-Schleife führt zunächst alle Anweisungen im Schleifenkörper aus und prüft dann die Bedingung. Diese Schleife führt also nur einmal die Anweisungen des Schleifenkörpers aus.

do
{
    //my instructions
}while(0)

ist gleichbedeutend mit dem Schreiben

{
    //my instructions
}

Die modernen Compiler sind intelligent genug, um diese Dinge zu optimieren!

1voto

UPT Punkte 1500

Es behandelt 0 als falsch und eine Zeitschleife wird ausgeführt und bricht ab, sobald sie while erreicht (g++ Compiler getestet).

1voto

Eli Punkte 606

Technisch gesehen wird es einmal ausgeführt, da es nach einmaliger Ausführung geprüft wird (und die Prüfung fehlschlägt).

Ansonsten wird es in Makros verwendet. Zum Beispiel:

#define blah(a) \
        something(1); \
        something(2)

if(a)
    blah(4);
else
    blah(19);

dazu führen würde:

...
if(a)
    something(1); something(2);
else
    something(1); something(2);

was keine gültige Syntax ist, da das else nicht mehr Teil der if-Anweisung ist. Was Sie tun können, ist:

 define blah(a) \
    do {
       something(1); something(2);
    } while(0)

    ...

was sich in einer einzigen Anweisung im if-Block niederschlagen würde:

if(a)
    do { something(1); something(2); } while(0);
else
    ...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X