[gnu.g++.help] using the ellipsis

shane%mishka@RAND.ORG (Darrell) (12/12/90)

How would one use va_start when no formal arguments are specified in 
the argument list?  For example suppose I wanted to write a function 
print_strs which would take an arbitrary number strings, terminated by 
a null string, and print them to cout.  


void print_strs(...)
{
  va_list ap;
  va_start(ap, ???);	// what arg should be used in place of ???

  while( 1 )  {
    char *sp = va_arg( ap, char* );
    if ( !sp ) break;
    cout << sp << "\n";
  }
  va_end( ap );
}


This is not the best example since there is no compelling reason not 
to define print_strs with the argument list ( char *sp1 ... ) and use 
sp1 in place of ???.  However, I do have a real need for a virtual 
member function with an ( ... ) argument list.


Thanks,
Darrell Shane

glenn@huxley.huxley.bitstream.com (Glenn P. Parker) (12/14/90)

In article <9012112222.AA23214@mishka.rand.org>,
shane%mishka@RAND.ORG (Darrell) writes:
> How would one use va_start when no formal arguments are specified in 
> the argument list?

Varadic functions _must_ have at least one non-varadic argument.  The
premise is (sort of) that you need at least one argument to tell you how
many other arguments to expect.  Although you could communicate that
information through some other mechanism (e.g. global or member variable),
it is simply not supported by <stdarg.h>.

--
Glenn P. Parker       glenn@bitstream.com       Bitstream, Inc.
                      uunet!huxley!glenn        215 First Street
                      BIX: parker               Cambridge, MA 02142-1270