akshay@cbnewsm.att.com (akshay.kumar.deshpande) (06/18/91)
I am trying to write a variable argument function which in turn
calls another variable argument function. Can anybody tell me how
to pass the unknown arguments I receive to the next function.
Here is a psuedo example:
A(int arg1, ...)
{
.
.
va_start(ap, fmt); /* from K&R 2nd edition - p 156 */
.
B(arg1, arg2, arg3, <...>);
.
}
B(int arg1, int arg2, int arg3, ...);
{
.
.
.
}
I would like to have the "..." of A match that for the function
call of B.
-akshay
speedy@att.att.com
(908) 957-3252mouse@thunder.mcrcim.mcgill.edu (der Mouse) (06/18/91)
In article <1991Jun17.205314.25401@cbnewsm.att.com>, akshay@cbnewsm.att.com (akshay.kumar.deshpande) writes: > I am trying to write a variable argument function which in turn calls > another variable argument function. Can anybody tell me how to pass > the unknown arguments I receive to the next function. (Questions generally end with `?' instead of `.'.) > Here is a psuedo example: [compressed -dM] > A(int arg1, ...) { > va_start(ap, fmt); /* from K&R 2nd edition - p 156 */ > B(arg1, arg2, arg3, <...>); > } > B(int arg1, int arg2, int arg3, ...); { ... } > I would like to have the "..." of A match that for the function call > of B. Sorry, can't be done. You have to provide a v- form of B that takes a va_list parameter and then call that from A. (You should probably do this anyway; in fact, a normal thing to do would be to have B just call its varargs version.) Note also that va_start takes the name of the last fixed argument, which is arg1, not fmt. (You can't just blindly copy code from K&R; you have to understand it first, if only minimally.) Something like (declarations omitted; also don't forget the va_end() calls) A(int arg1, ...) { va_start(ap, arg1); vB(arg1, arg2, arg3, ap); } B(int arg1, int arg2, int arg3, ...); { va_start(ap,arg3); vB(arg1,arg2,arg3,ap); } vB(int arg1, int arg2, int arg3, va_list ap) { ...do the real B here... } der Mouse old: mcgill-vision!mouse new: mouse@larry.mcrcim.mcgill.edu