mikrocontroller.net

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


Autor: Lutz Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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       |
  +-----------------+

Autor: Lutz Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist solange egal, bis Du die den erzeugten Code mal ansiehst.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.