Título: headers cstdarg (stdarg.h) Publicado por: Dark Invader en 20 Junio 2011, 22:23 pm Bueno estuve buscando algo de informacion de esto,ya que lo vi en un tutorial y bueno me he quedado un poco en blanco :xD No se ni para que sirve ni nada por el estilo,
Serian el va-list,va_start y va_end pero es que no tengo ni idea de para que utilizarlos.Si alguien me lo pudiera explicar y con algun que otro ejemplo sencillo se lo agradeceria. Gracias adelantadas. Salu2 Título: Re: headers cstdarg (stdarg.h) Publicado por: Khronos14 en 21 Junio 2011, 01:13 am 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: Código
Y aquí tienes un pequeño ejemplo que hice: Código
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. Título: Re: headers cstdarg (stdarg.h) Publicado por: Dark Invader en 21 Junio 2011, 13:53 pm Hola y gracias por contestar,
Me quedan algunas dudas y espero que no te moleste que te las pregunte: Código
¿Hace falta guardarlo todo en un puntero char? Porque si por ejemplo lo opngo a un puntero int esta linea no seria la misma no?: Código Y en esta linea: funcion(3, "hola", "que tal", "esta es una funcion con parametros"); El 3 al parecer es el numero de parametros,pero podrian haber sido numeros en vez de palabras ¿no? Gracias por aclararme la duda. Salu2 Título: Re: headers cstdarg (stdarg.h) Publicado por: Khronos14 en 21 Junio 2011, 14:04 pm Hola Dark Invader, pues como ya te dije en la función va_arg, en el segundo parámetro le indicas el tipo de dato que quieres obtener. En el ejemplo que te puse, quiero obtener 3 punteros de tipo char. Si quieres obtener int, harías algo así:
Código
Saludos. Título: Re: headers cstdarg (stdarg.h) Publicado por: Dark Invader en 21 Junio 2011, 14:23 pm Ok me ha quedado todo mas claro,solo me queda una pequeña duda...
¿cuantos argumentos podra tener? Código
Por ejemplo esto haria que tuviera 5 valores int,pero pueden ser varios valores?¿para que se pueden utilizar este tipo de "macros"? Salu2 y gracias de nuevo Título: Re: headers cstdarg (stdarg.h) Publicado por: Khronos14 en 21 Junio 2011, 14:31 pm El número de argumentos máximos depende de va_start, que se le pasa un valor de tipo int, por lo tanto debería permitir 4294967296 parámetros. Pero, la verdad, no creo que aguante tantos parámetros ni te recomendaría que lo comprobaras ;D
Si haces: Código
Si al primer parámetro le pasas un 3, así que va a ignorar los 2 últimos números, la suma daría 12. Código
Suelen ser bastante útiles estas funciones, un ejemplo claro son las funciones: printf, fprintf, sprintf.. El uso que le des a esto, depende de tu imaginación a la hora de programar. Saludos. Título: Re: headers cstdarg (stdarg.h) Publicado por: Dark Invader en 21 Junio 2011, 14:44 pm Gracias Khronos14 me has ayudado mucho y gracias a ti he aprendido cosas nuevas ::) De momento haré más ejercicios sobre esto para dominarlo.
De nuevo muchas gracias. Salu2 |