sahlot arvind wrote: > 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)? > with #define INIT_LIST_HEAD(ptr) {(ptr)->next = (ptr); (ptr)->prev = (ptr);} try this: if (...) INIT_LIST_HEAD(ptr); else ...; you will get compilation error: error: expected expression before 'else' see why? expand the macro: if (...) { (ptr)->next = (ptr); (ptr)->prev = (ptr); }; <---here else ...; -- To unsubscribe from this list: send an email with "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx Please read the FAQ at http://kernelnewbies.org/FAQ