|
From: Greg B. <ba...@cs...> - 2002-04-02 16:56:03
|
So that they work as you'd expect when preceded by an if clause-- they
need to be a single statement (which many of them happen to already be,
but if the macro definition got any more complicated, they wouldn't
be). E.g., consider:
#define DO_STUFF(x) \
do something;
do something else;
being used as:
if (...)
DO_STUFF(x)
it'll expand into:
if (...)
{
do something;
}
do something else;
I've added braces to stress the problem. The do/while(0) makes it work
as the user of the macro probably expected, w/o requiring her to
remember to use braces everytime she uses DO_STUFF.
I think the GNU C programming standards mention this coding style, but I
don't have a reference handy.
Thanks,
Greg
Scott Lenser <sl...@cs...> writes:
> Greg,
>
> In the validate macros such as:
>
> #define VALIDATE_WIN_USE_CONTEXT(win) \
> do { if ((win = ensure_valid(win,1,FUNC_NAME, SCM_BOOL_T, SCM_BOOL_F)) ==
> SCM_BOOL_F) \
> return SCM_BOOL_F; } while (0)
>
> Why do they all have a do { } while(0) around the code?
>
> Thanks.
>
> - Scott
|