Forum: Compiler & IDEs Kurze Frage zur AVR C lib


von µC (Gast)


Lesenswert?

Hallo!

Eine simple Frage zur C Syntax.  Wieso an dieser Stelle eine do-while(0) 
Schleife??
1
#define sleep_cpu()                              \
2
do {                                             \
3
  __asm__ __volatile__ ( "sleep" "\n\t" :: );    \
4
} while(0)


Assembler Optimierung vielleicht??

von Karl H. (kbuchegg)


Lesenswert?

µC schrieb:

> Assembler Optimierung vielleicht??


Nein. Die kurze Antwort ist:
Damit man das Makro auch an Stellen einsetzen kann, an denen es sonst zu 
Problemen kommen kann, wenn man den Makroinhalt nicht in einen Block 
einschliesst.

wie zb Variationen von

  if( ... )
    sleep_cpu();
  else
    ....

Die einschliessende do-while Schleife verpackt den Makroinhalt so, dass 
er mehr wie eine Funktion benutzt werden kann, die ihren Inhalt 
gruppiert. Im gegenständlichen Fall mit lediglich einer einzigen 
Anweisung wäre das an und für sich noch kein großes Problem, aber sobald 
mehrere Anweisungen im Spiel sind, wird es zu einem Problem.

von Karl H. (kbuchegg)


Lesenswert?


von µC (Gast)


Lesenswert?

Ah verstehe.


Karl Heinz Buchegger schrieb:
> Im gegenständlichen Fall mit lediglich einer einzigen
> Anweisung wäre das an und für sich noch kein großes Problem,

Wird dann wohl grundsätzlich auch für Einzeilige statements gemacht.



Danke für die Antwort. :)

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.