El archivo de cabecera de la biblioteca estándar de C
stdarg.h se utiliza para poder acceder a una cantidad variable de argumentos
pasados a una función.
Foto tomada de freedigitalphotos.net |
Para utilizar este concepto miramos éste ejemplo de
declaración y uso de una función:
long
func(char, double, int, ...);
long
func(char a, double b, int c, ...)
{
/* ... */
}
Hemos definido la función, que acepta un char, un double, un
int y un número indeterminado de parámetros de tipo entero. A la hora de
usarlo, se puede ver igualmente como se declaran los parámetros de la misma
forma.
El tipo en stdarg.h es:
Name
|
Description
|
va_list
|
type for iterating arguments
|
Los macros son:
Name
|
Description
|
va_start
|
Comienza a recorrer la lista de argumentos.
|
va_arg
|
Devuelve un argumento.
|
va_end
|
Libera una lista de argumentos.
|
va_copy
|
Copia elementos de una lista de argumentos a otra.
|
Un ejemplo de uso sacado de la Wikipedia:
#include
<stdio.h>
#include
<stdarg.h>
/* Muestra por pantalla todos los números positivos, se
asume que son enteros */
void
printargs(int arg1, ...)
{
va_list ap;
int i;
va_start(ap, arg1);
for (i = arg1; i >= 0; i = va_arg(ap,
int))
printf("%d ", i);
va_end(ap);
putchar('\n');
}
int
main(void)
{
printargs(5, 2, 14, 84, 97, 15, 24, 48, -1);
printargs(84, 51, -1);
printargs(-1);
printargs(1, -1);
return 0;
}
¿Qué utilidades ves al uso de stdarg.h?