Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Aug 2006 15:55:18 -0700
From:      Julian Elischer <julian@elischer.org>
To:        John-Mark Gurney <gurney_j@resnet.uoregon.edu>
Cc:        usb@freebsd.org, Tofig Suleymanov <tofik@oxygen.az>
Subject:   Re: USB_ATTACH_SETUP macros question
Message-ID:  <44E4F3D6.9040808@elischer.org>
In-Reply-To: <20060817223716.GW99774@funkthat.com>
References:  <35069.85.132.32.38.1155816624.squirrel@85.132.32.38> <20060817223716.GW99774@funkthat.com>

next in thread | previous in thread | raw e-mail | index | archive | help
John-Mark Gurney wrote:

>Tofig Suleymanov wrote this message on Thu, Aug 17, 2006 at 17:10 +0500:
>  
>
>>is there anybody to explain why do we have infinite loop inside of
>>USB_ATTACH_SETUP macros inside of usb_port.h ? How does his loop gets
>>escaped when we use it in some usb driver ?
>>
>>#define USB_ATTACH_SETUP \
>>        do { \
>>                sc->sc_dev = self; \
>>                device_set_desc_copy(self, devinfo); \
>>                device_printf(self, "%s\n", devinfo); \
>>        } while (0);
>>    
>>
>
>The real bug here is the extra ; after the while(0) part... because
>if you use it as such:
>	if (case)
>		USB_ATTACH_SETUP;
>	else
>		somethingelse;
>
>you will get a compile error due to the double semicolon...
>  
>

yes style(9) specifies this form of macro should NOT have the semicolon.

>In cases like this, it is also common to have parens after the macro
>name so that it looks like a function, and not a simple expresion.
>  
>
yes




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?44E4F3D6.9040808>