l i n u x - u s e r s - g r o u p - o f - d a v i s
L U G O D
 
Next Meeting:
December 2: Social gathering
Next Installfest:
TBD
Latest News:
Nov. 18: Club officer elections
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;

nice!

> >
> > 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
that.

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.

pete
_______________________________________________
vox-tech mailing list
vox-tech@lists.lugod.org
http://lists.lugod.org/mailman/listinfo/vox-tech



LinkedIn
LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
facebook
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:
Appahost Applications
For a significant contribution towards our projector, and a generous donation to allow us to continue meeting at the Davis Library.