6.14.2 va_arg Macro
Gets the next argument in a variable argument list represented by a
va_list object.
Include
<stdarg.h>
Prototype
type va_arg(va_list ap,
type)
Arguments
ap- pointer to list of arguments
type- type of argument to be retrieved
Return Value
Returns the next argument in the argument list represented by ap with
the type specified as the second argument.
Remarks
The ap object must have been initialized by calls to either
va_start or va_copy before va_arg can be
used. If there is no next argument available or it is not of the type requested, the behavior
is undefined.
Example
See the notes at the beginning of this chapter or section for
information on using printf() or scanf()
(and other functions reading and writing the stdin or
stdout streams) in the example code.
#include <stdio.h>
#include <stdarg.h>
void tprint(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
while (*fmt)
{
switch (*fmt)
{
case '%':
fmt++;
if (*fmt == 'd')
{
int d = va_arg(ap, int);
printf("<%d> is an integer\n",d);
}
else if (*fmt == 's')
{
char *s = va_arg(ap, char*);
printf("<%s> is a string\n", s);
}
else
{
printf("%%%c is an unknown format\n",
*fmt);
}
fmt++;
break;
default:
printf("%c is unknown\n", *fmt);
fmt++;
break;
}
}
va_end(ap);
}
int main(void)
{
tprint("%d%s.%c", 83, "This is text.", 'a');
}
Example Output
<83> is an integer
<This is text.> is a string
. is unknown
%c is an unknown format
