#define's with variable length argument lists?

Checkpoint Technologies ckp at grebyn.com
Fri Nov 30 16:58:00 AEST 1990


In article <9340 at pasteur.Berkeley.EDU> foote at miro.Berkeley.EDU (Bill Foote) writes:
>:  #define glorp(a,b,c)  _glorp(__FILE__, __LINE__, a, b, c)
>:      glorp(3.1415926, 0x666, "glorp has intelligent error messages!");
>
>That's great, but what if glorp can have a variable-length argument list?
>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.

Just off the top of my head...  This may work for you.

: #define glorp _set_error(__FILE__,__LINE__), _glorp

The macro definition specifies _no_ parameters.  Specifically,
whatever parenthesised expression you code following a call to glorp is
not considered part of the macro expansion, but will simply appear as
the parameters to the enclosed trailing call to _glorp.



-- 
First comes the logo: C H E C K P O I N T  T E C H N O L O G I E S      / /  
                                                                    \\ / /    
Then, the disclaimer:  All expressed opinions are, indeed, opinions. \  / o
Now for the witty part:    I'm pink, therefore, I'm spam!             \/



More information about the Comp.lang.c mailing list