sklein@bonnie.ics.uci.edu (Steve Klein) (04/30/89)
If I forward-declare the function:
int func(a, b, ...);
Then how do I define and call 'func'?
I tried:
#include <varargs.h>
int func(a, b, va_alist);
int a, b;
va_dcl
{
...
}
but GNU CC says 'number of args doesn't match prototype'.
Trying
int func(a, b, c, d);
int a, b, c, d;
{
..casting c & d where appropriate..
}
this, of course, moans when I call func without all 4 params:
func (actual_a, actual_b);
I _thought_ in ANSI C that the trailing '...' told the compiler not to
check the number or types of the parameters that followed. Is there a way
to do this, or does one need C++ with its overloading for this kind of stuff?
I could use the -traditional switch on gcc, but I'd like _some_ kind of
type checking! Is this a compiler bug or something I don't understand
about ANSI?composer@bu-cs.BU.EDU (Jeff Kellem) (05/01/89)
In article <13024@paris.ics.uci.edu> sklein@bonnie.ics.uci.edu (Steve Klein) writes: >If I forward-declare the function: > > int func(a, b, ...); > >Then how do I define and call 'func'? > >I tried: > #include <varargs.h> > > int func(a, b, va_alist); > int a, b; > va_dcl > { > ... > } > >but GNU CC says 'number of args doesn't match prototype'. GCC is correct with this. For one, <varargs.h> is not (as far as I know) part of the ANSI standard. What you want to use is <stdarg.h>. So, basically what you want in ANSI C for the above is something like the following: #include <stdarg.h> int func(int, int, ...); ... int func(int a, int b, ...) { va_list arg_pointer; int foo; ... /* Then in here, call va_start(arg_pointer, b); */ /* to initialize the argument pointer to the optional */ /* parameter list. */ va_start(arg_pointer, b); /* Successive calls to va_arg will get the remaining args. */ foo = va_arg(arg_pointer, int); /* Then, finally call va_end to reset everything back to normal. */ va_end(arg_pointer); ... } Hope this helps ... Enjoy ... -jeff Jeff Kellem INTERNET: composer@bu-cs.bu.edu (or composer%bu-cs.bu.edu@bu-it.bu.edu) UUCP: ...!harvard!bu-cs!composer