Hallo, ich habe im Netz dieses gefunden:
1 | #define LED(onoff) do {\
|
2 | if (onoff) \
|
3 | MYLEDPORT &= ~MYLEDBIT; \
|
4 | else \
|
5 | MYLEDPORT |= MYLEDBIT; \
|
6 | } while(0)
|
Was macht dieses while(0)?
|
Forum: Compiler & IDEs Was macht while(0)Hallo, ich habe im Netz dieses gefunden:
Was macht dieses while(0)? while sollte dir bekannt sein. Stellt sich nur noch die Frage, steht 0 für wahr oder falsch? Für solch ein Unwissen sollte man dich mit deinem eigenen Schwert köpfen. Was passiert ist mir klar, die Frage die sich mir stellt ist, warum macht man das so? Ich behaupte: Nix. Die do-while Schleife wird so lange ausgeführt wie die Bedingung in der while erfüllt ist. Da diese aber 0 ist wird da wohl nicht viel passieren. Bin mir aber gerade nicht sicher ob die Schleife nicht sogar einmal ausgeführt wird. Arbeite so selten mit der Art von Schleife. Das do-while(0)-Konstrukt braucht man in funktionsähnlichen Makros, die aus mehreren Einzelanweisungen oder einer If-Anweisung ohne Else-Zweig bestehen, damit sie sich syntaktisch korrekt in jedem denkbaren Kontext tatsächlich wie eine Funktion nutzen lassen. Im obigen Beispiel ist es allerdings überflüssig, da das Makro dort eine vollständige If-Else- Anweisung enthält (das letzte Semikolon muss dann aber ebenfalls weg). Fabian hat ja schon einen passenden Link gepostet, wo ihr weiteres nachlesen könnt: Fabian O. schrieb: > http://stackoverflow.com/questions/257418/do-while... Yalu X. schrieb: > Fabian hat ja schon einen passenden Link gepostet, wo ihr weiteres > nachlesen könnt: > > Fabian O. schrieb: >> http://stackoverflow.com/questions/257418/do-while... Ja, danke hatte den Link erst nach meiner Frage gesehen. Hans W schrieb: > Was passiert ist mir klar, die Frage die sich mir stellt ist, warum > macht man das so? So hätte ich meinen Thread formulieren sollen! Danke allen, die mir geholfen haben! Yalu X. schrieb: > Im obigen Beispiel ist es allerdings überflüssig, da das Makro dort eine > vollständige If-Else-Anweisung enthält (das letzte Semikolon muss dann > aber ebenfalls weg). Allerdings bringt gcc dann bei einem
folgende Warnung: ******************** Warnung: es wird empfohlen, explizite geschweifte Klammern zu setzen, um mehrdeutiges »else« zu vermeiden [-Wparentheses] ******************** 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.
|
|