Re: why do we use while (0)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux