Forum: Compiler & IDEs Unterschied while() und do {} while()


von Lutz Müller (Gast)


Lesenswert?

Hallo,

kurze Frage: Gibt es einen Grund, warum beim warten auf einen
bestimmten Zustand mit "loop_until_bit_is_set" do{} while () genutzt
wird? Oder ist es wie "for (;;)" statt "while (1)" nur eine
"übliche Schreibweise"?

Danke und Gruß
Lutz

von Jochen (Gast)


Lesenswert?

Nein

Das sind zwei unterschiedliche Schleifenarten. Das eine ist eine
kopfgestuerte Schleife, das andere eine fußgesteuerte Schleife.

Sprich bei

do
{
//Befehl
}while()

hier wird der befehl mindestens ein mal ausgeführt bevor die
Abbruchbedinung abgefragt wird

bei

while()
{
//Befehl
}

kann es sein das der Befehl nie ausgeführt wird.


Grüßle Jochen

von Rufus T. Firefly (Gast)


Lesenswert?

Das ist in der Tat ein Unterschied:

  while (expression) {statement}

ist eine sogenannte "pre-check-loop". Das
Schleifenfortsetzungskriterium wird vor dem Schleifendurchlauf geprüft.
Trifft das Fortsetzungskriterium gleich von Anfang an nicht zu, wird die
Schleife kein einziges Mal durchlaufen.

  do {statement} while (expression)

ist eine "post-check-loop" - die Schleife wird durchlaufen und danach
wird das Schleifenfortsetzungskriterium geprüft.
Somit wird diese Schleife mindestens einmal durchlaufen.

In Struktogrammschreibweise:

  +-----------------+
  | Kriterium       |
  |  +--------------+
  |  |              |
  |  |              |
  +--+--------------+

und

  +--+--------------+
  |  |              |
  |  |              |
  |  +--------------+
  | Kriterium       |
  +-----------------+

von Lutz Müller (Gast)


Lesenswert?

Der von Euch aufgezeigte Unterschied ist einigermaßen klar. Ich meinte
in diesem Falle aber speziell den Einsatz in der avr-libc mit
"loop_until_bit_is_set" oder dem Gegenspieler "_clear". Da SOLLTE
es doch eigentlich egal sein, ob er die Bedingung vor oder nach der
expression prüft. Da liegt mein "Problem", da ich mittlerweile bei
vielen Sachen in C einen "tieferen Sinn" zu übersehen fürchte. Und
einmal falsch gelernt läßt sich ja bekanntlich schwer wieder
korrigieren...

von A.K. (Gast)


Lesenswert?

Ist solange egal, bis Du die den erzeugten Code mal ansiehst.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.