Mail Archives: djgpp/1993/08/20/04:28:12
Excerpts from external.djgpp: 20-Aug-93 varargs by Mark Bergman AT panix DOT com
> Does anyone have some good examples of code using variable
> argument lists <varargs.h>?
I had some trouble using varargs.h, but the following code works with
<stdarg.h>:
#include <stdarg.h>
char bigbuf[256];
void Printf(char *fmt, ...)
{ va_list args;
va_start(args, fmt);
vsprintf(bigbuf, fmt, args);
va_end(args);
puts(bigbuf);
}
This works fine because vsprintf knows how many args it should expect
from the format string. If you want to do something with the args your
self, you need va_arg(args, some type) in a loop and terminate the args
with e.g. NULL.
(off hand!):
void put_strings(char *first, ...)
{ va_list args;
va_start(args, first);
while(1)
{ char *s = va_arg(args, (char *)); // increments to next arg
if (s == NULL)
break;
puts(s);
}
va_end(args);
}
put_strings("hello", "world", NULL);
This implies that you have to know the type of the args.
You can't nest calls that use va_start/va_end, but the librairy
'varargs' functions (like vsprintf) don't use varargs.
Hope this helps,
Harco.
- Raw text -