#define's with variable length argument lists?

Bill Foote foote at miro.Berkeley.EDU
Fri Nov 30 13:32:36 AEST 1990


I'd like to add some debugging output to programs that use a library
I've written, using this hack:

:  
:  #defing glorp(a,b,c)  _glorp(__FILE__, __LINE__, a, b, c)
:  
:      <...>
:  
:      glorp(3.1415926, 0x666, "glorp has intelligent error messages!");
:  

This allows glorp to report from where it was called.

That's great, but what if glorp can have a variable-length argument list?
I don't think that #define can handle this...  Can it?  i.e. can I indicate
somehow that the last argument is optional?

I know that I could do the following:

:
:  #define glorp(a)     {  _set_error(__FILE__, __LINE__);      \
:			   _glorp a  }
:
:      <...>
:
:  glorp((27, "This is ugly!"));
:

but this is inefficient, ugly, and breaks all of my existing applications.

Is there some good way around this?  A way that would be invisible to
existing applications (with just an appropriate #define or two in the
right .h file)?

Thanks in advance,

Bill Foote 			    INTERNET:  foote at miro.berkeley.edu
				     - or -    foote at cs.berkeley.edu
				    UUCP:  ..!ucbvax!miro!foote at uunet.uu.net



More information about the Comp.lang.c mailing list