Gast
#3087427
Hallo, ich habe im Netz dieses gefunden:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Was macht dieses while(0)?
|
Anzeige
|
Was macht while(0)
Gast
#3087427
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.
Gast
#3087434
Was passiert ist mir klar, die Frage die sich mir stellt ist, warum macht man das so?
Gast
#3087436
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. Wird einmal ausgeführt. do{} while (0) darf getrost weggelassen werden.
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...
Gast
#3087450
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.
Gast
#3087495
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] ******************** Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|