Pages - Menu

viernes, 31 de enero de 2014

La librería stdarg.h

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
Esto se utiliza mucho en programación con el concepto de “Variadic function”, es decir, una función que acepta un número variable de argumentos.

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?