En google hay un montón de información sobre eso. Básicamente sirve para crear funciones que no tienen un número de parámetros fijos. El ejemplo más claro es la función printf.
Para declarar una función con un número de parámetros variable, hay que usar los 3 puntos:
Y aquí tienes un pequeño ejemplo que hice:
Si te fijas, a la función va_arg le especifico que quiero obtener un parámetro de tipo char*, puedes especificar otros como int, double, etc..
La función printf para obtener el número de parámetros lo que hace es contar el número de % que se le pasa en la primera cadena y según la letra que le preceda obtiene de la lista un int, double, char*. En esta función de ejemplo, necesitamos especificar cuantos parámetros le pasamos.
http://www.cplusplus.com/reference/clibrary/cstdarg/va_arg/
Saludos.
Para declarar una función con un número de parámetros variable, hay que usar los 3 puntos:
Código (cpp) [Seleccionar]
void function(int numParametros, ...)
Y aquí tienes un pequeño ejemplo que hice:
Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdarg.h>
void funcion(int numParametros, ...)
{
va_list list; //variable de tipo va_list
va_start(list, numParametros); //iniciamos la lista de parametros y le pasamos el número
for (int i = 0; i < numParametros; i++) //recorremos la lista
{
char * buffer = (char*)va_arg(list, char *); //obtenemos los parámetros de izquiera a derecha
puts(buffer); //escribimos
}
va_end(list); //limpiamos la lista
}
int main(int argc, char * argv[])
{
funcion(3, "hola", "que tal", "esta es una funcion con parametros");
getchar();
return 0;
}
Si te fijas, a la función va_arg le especifico que quiero obtener un parámetro de tipo char*, puedes especificar otros como int, double, etc..
La función printf para obtener el número de parámetros lo que hace es contar el número de % que se le pasa en la primera cadena y según la letra que le preceda obtiene de la lista un int, double, char*. En esta función de ejemplo, necesitamos especificar cuantos parámetros le pasamos.
http://www.cplusplus.com/reference/clibrary/cstdarg/va_arg/
Saludos.