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
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
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 |
+-----------------+
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.