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)
(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