What's the use of do while(0) when we define a macro?
c, linux-kernel, macros
Solution
You can follow it with a semicolon and make it look and act more like a function. It also works with if/else clauses properly then.
Without the while(0), your code above would not work with
if (doit)
INIT_LIST_HEAD(x);
else
displayError(x);
since the semicolon after the macro would "eat" the else clause, and the above wouldn't even compile.
Problem
Possible Duplicates: Do-While and if-else statements in C/C++ macros do { … } while (0) — what is it good for? I'm reading the linux kernel and I found many macros like this: ``` #define INIT_LIST_HEAD(ptr) do { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ } while (0) ``` Why do they use this rather than define it simply in a {}?