2005-01-05 14:01:50

by Kotian, Deepak

[permalink] [raw]
Subject: Purpose of do{}while(0) in #define spin_lock_init(x) do { (x)->lock = 0; } while(0)


Just for information, may be very simple.

Is there any specific reason why do{}while(0) is
there in this definition
#define spin_lock_init(x) do { (x)->lock = 0; } while(0)

What could happen if it is replaced by
#define spin_lock_init(x) { (x)->lock = 0; }

There are couple of other places, where this kind of usage
is observed in the kernel code.

Thanks and Regards
Deepak




2005-01-05 14:11:46

by Paolo Ornati

[permalink] [raw]
Subject: Re: Purpose of do{}while(0) in #define spin_lock_init(x) do { (x)->lock = 0; } while(0)

On Wed, 5 Jan 2005 19:31:44 +0530
"Kotian, Deepak" <[email protected]> wrote:

> Is there any specific reason why do{}while(0) is
> there in this definition
> #define spin_lock_init(x) do { (x)->lock = 0; } while(0)
>
> What could happen if it is replaced by
> #define spin_lock_init(x) { (x)->lock = 0; }
>
> There are couple of other places, where this kind of usage
> is observed in the kernel code.

look at http://www.kernelnewbies.org/faq/

--
Paolo Ornati
Gentoo Linux (kernel 2.6.10-cko2)

2005-01-05 14:15:29

by Bernd Petrovitsch

[permalink] [raw]
Subject: Re: Purpose of do{}while(0) in #define spin_lock_init(x) do { (x)->lock = 0; } while(0)

On Wed, 2005-01-05 at 19:31 +0530, Kotian, Deepak wrote:
> Is there any specific reason why do{}while(0) is
> there in this definition
> #define spin_lock_init(x) do { (x)->lock = 0; } while(0)
>
> What could happen if it is replaced by
> #define spin_lock_init(x) { (x)->lock = 0; }

http://kernelnewbies.org/faq/index.php3#dowhile

Bernd
--
Firmix Software GmbH http://www.firmix.at/
mobil: +43 664 4416156 fax: +43 1 7890849-55
Embedded Linux Development and Services