foote@miro.Berkeley.EDU (Bill Foote) (11/30/90)
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@miro.berkeley.edu - or - foote@cs.berkeley.edu UUCP: ..!ucbvax!miro!foote@uunet.uu.net
ckp@grebyn.com (Checkpoint Technologies) (11/30/90)
In article <9340@pasteur.Berkeley.EDU> foote@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! \/