What’s the use of do while(0) when we define a macro? [duplicate]

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.

Leave a Comment