Recently I started looking into linux kernel and trying to understand the
code.
I am working with linux-2.6.9.
in file include/llinux/list.h - I found something like this.

#define INIT_LIST_HEAD(ptr) do { \
        (ptr)->next = (ptr); (ptr)->prev = (ptr); \
} while (0)


My question is why do we use a loop when we actually know that it is not
going to execute more than once? Cannot we simply do -

#define INIT_LIST_HEAD(ptr)    {(ptr)->next = (ptr); (ptr)->prev = (ptr)}

Do we get some kind of optimization by using while (0)?


Thanks

Reply via email to