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 [EMAIL PROTECTED]
Please read the FAQ at http://kernelnewbies.org/FAQ

Reply via email to