Was soll das denn? Aus dem Linux-Kernel...
-
Hallo,
hab grade folgendes gesehen (im Linux-Kernel 2.4)
#define INIT_LIST_HEAD(ptr) do { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ } while (0)Wozu soll den die Schleife gut sein? Passiert doch wegen
dem while(0) eh nur einmal, das ganze? Irgend nen Sinn wirds ja haben,
nur versteh ich den nicht
Wer hilft weiter?
Gruss,
frager
-
soll wahrscheinlich die verwendung des semikolons am ende erzwingen.
-
frager schrieb:
Wer hilft weiter?
Die Kernel doku (im Styleguide), da steht drin warum man das so machen soll, hab's leider grad vergessen

MfG
GPC
-
GPC schrieb:
frager schrieb:
Wer hilft weiter?
Die Kernel doku (im Styleguide), da steht drin warum man das so machen soll, hab's leider grad vergessen

AFAIK wird das so definiert, damit so etwas funktioniert:
if(ptr) INIT_LIST_HEAD(ptr); else invalid_ptr();
-
Jow, das kann gut sein. Das do-while Konstrukt war irgendeine Absicherung...
-
Kann man denn nicht ganz normal eine Block im define haben?
#define FOOBAR(blubb) { \ foo(blubb); \ bar(blubb); \ }
-
Na, da haette ich ja auch selbst drauf kommen koennen

Auf jeden Fall mal Danke!

-
1310-Logik schrieb:
Kann man denn nicht ganz normal eine Block im define haben?
#define FOOBAR(blubb) { \ foo(blubb); \ bar(blubb); \ }Probier mal mit diesem #define den von mir geposteten Code zu kompilieren.
-
Hab grad kein Kompeiler zur Hand, was tut es denn?
-
Dann halt mal einsetzen:
#define FOOBAR(blubb) { \ foo(blubb); \ bar(blubb); \ } if(ptr) FOOBAR(ptr); else invalid_ptr();der Compiler sieht (modulo Formatierung)
if(ptr) { foo(ptr); bar(ptr); }; else invalid_ptr();Nun klarer?
-
Ach so, klar wie Klöschenbrühe, Du meinst, dass er am Ende ein Semikolon setzt. Tja ok, das geht nicht.
#define FOOBAR(blubb) { \ foo(blubb); \ bar(blubb); \ } if(ptr) FOOBAR(ptr) // und so??? else invalid_ptr();
-
Ja, das ginge. Allerdings ist es halt etwas inkonsistent, wenn bei einigen Sachen ein Semikolon hinschreiben muß und bei anderen nicht darf. Deswegen der einfache Trick und schon muß man immer ein Semikolon schreiben.
-
dann gehts natürlich

aber wenn jemand den Code schön formatieren will, setzt er ein ";" und wir haben den Salat. Deshalb der Styleguide.