l i n u x - u s e r s - g r o u p - o f - d a v i s
Next Meeting:
July 7: Social gathering
Next Installfest:
Latest News:
Jun. 14: June LUGOD meeting cancelled
Page last updated:
2002 Oct 17 17:33

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox-tech] macro arguments in C
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [vox-tech] macro arguments in C

begin Mark K. Kim <markslist@cbreak.org> 
> btw, getting rid of "errno" as a part of die's argument was left as an
> excercise to the reader.
> (actually, i just didn't realize you wanted that gone, too, but hey...
> it's a good exercise.)

> On Thu, 17 Oct 2002, Mark K. Kim wrote:
> > It's a hack but it works:
> >
> >    #define die if(\
> >       (die_filename = __FILE__) && \
> >       (die_function = __FUNCTION__) && \
> >       (die_line = __LINE__) \
> >    ) die_for_reals
> >
> >
> >    char* die_filename;
> >    char* die_function;
> >    int die_line;


> >
> > Note the following:
> >
> >    - "if" is used in the "die" macro to join the macro value store
> >      stage and the "die_for_reals" function call stage.  It should
> >      always evaluate all three conditionals within the if statement,
> >      and they should always evaluate to true, so "die_for_reals"
> >      should always be called.
> >
> >      This "if" trick is necessary.  Otherwise you'd have to have
> >      {} die, like this:
> >
> >         if(condition) { die(errno, "Blah %d", 5); }
> >
> >      which isn't desirable.

very sneaky.  i'm definitely going to store this one away in my bag of
tricks!  thanks for explaining the "if".  i wouldn't have thought of

did you figure this out?  or is there a book of sneaky tricks that this
came from?

> >    - Your die() function had a problem.  The line
> >
> >          vfprintf(stderr, "   %s\n", args);

yeah, this was one of those things where i realized that after i sent
out the email, but didn't want to reply to my own post to correct it.
oh well.  it could've saved me 10 minutes of trying to figure it out.
but it was 10 minutes worth spending.  :)

thanks for the trick -- very cool tip.

vox-tech mailing list

LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
Sunset Systems
Who graciously hosts our website & mailing lists!