Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Funcion con numero indefinido de parametros

Estas en el tema de Funcion con numero indefinido de parametros en el foro de C/C++ en Foros del Web. Hola. Me gustaria saber como puedo hacer una funcion que tenga un numero indefinido de parametros. Por ejemplo, a la funcion printf se le pueden ...
  #1 (permalink)  
Antiguo 18/10/2009, 01:40
 
Fecha de Ingreso: abril-2008
Mensajes: 141
Antigüedad: 16 años
Puntos: 0
Funcion con numero indefinido de parametros

Hola.

Me gustaria saber como puedo hacer una funcion que tenga un numero indefinido de parametros.

Por ejemplo, a la funcion printf se le pueden pasar cuantos parametros quieras:
Código:
printf ("hola %d, %d, %d", 1, 2, 3);
Mi objetivo es juntar las funciones sprintf y write en una unica funcion para evitar estar escribiendolas todo el rato cuando quiero mostrar algo por pantalla (no puedo usar printf).

Gracias.
  #2 (permalink)  
Antiguo 18/10/2009, 03:09
Avatar de Claw  
Fecha de Ingreso: abril-2009
Mensajes: 299
Antigüedad: 15 años
Puntos: 9
Respuesta: Funcion con numero indefinido de parametros

1. Almacenas en una lista los parámetros que quieras pasarle a esa nueva función
2. A la función le pasas esa lista y su tamaño.

Por ejemplo:

lista = {1,2,3}

mifuncion(lista,3)

Otra solución mejor aún si vas a imprimir tipos de datos es crearte un struct con dos campos: tipo del dato (d,i,f,c,s,etc) y dato.

La lista estaría hecha de esos structs.

Salu2
  #3 (permalink)  
Antiguo 18/10/2009, 05:38
Avatar de r0d
r0d
 
Fecha de Ingreso: noviembre-2007
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 3
Respuesta: Funcion con numero indefinido de parametros

Se puede tambien utilizar una funcion con parametros opcionales. Es lo que hace printf(). Eso es mas en C.
En C++, haremos como dijo Claw.
__________________
Alicia: Sólo quiero saber que camino debo tomar.
Gato risón: Pues... depende mucho de donde quieras ir.

Mi página web
  #4 (permalink)  
Antiguo 18/10/2009, 07:59
Avatar de Claw  
Fecha de Ingreso: abril-2009
Mensajes: 299
Antigüedad: 15 años
Puntos: 9
Respuesta: Funcion con numero indefinido de parametros

Pero la función con parámetros opcionales no deja introducir un número ilimitado de parámetros, únicamente especifica que si hay alguno que no se ponga toma un valor por defecto.

¿No?

Salu2
  #5 (permalink)  
Antiguo 19/10/2009, 04:01
Avatar de r0d
r0d
 
Fecha de Ingreso: noviembre-2007
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 3
Respuesta: Funcion con numero indefinido de parametros

Si. Es exactamente el principio de printf: accepta cualquier numero de parametros. Esta manera de hacer necesita alugunas macro (va_list, va_start, va_end,..., ver la pagina de la msdn, por ejemplo. No encuentro nada en español).

No hay que cunfundir una funccion con paremetros que tienen valores por defecto, con una funccion con parametros opcionales. Poner valores por defecto a los parametros permite tambien que algunos parametros sean opcionales, pero el numero de parametros es fijo, aunque en una funccion con parametros opcionales, el numero de parametros es ilimitado. Hay algunas limites, como pro ejemplo, todos los parametros opcionales tienen que ser del mismo tipo, pero no me acuerdo de todo, eso es C y soy mas de C++.

Mirad por ejemplo la funccion del ejemplo de la msdn:

Código:
void testit ( int i, ...) // el secreto esta esto, lo tres puntos
{
   va_list argptr; // esta linea declara la lista de parametros
   va_start(argptr, i); // esta linea empieza el bucle sobre la lista de parametros (sin saber el numero de parametros)

   if ( i == 0 ) {
      int n = va_arg( argptr, int ); // esto es para recuperar el valor de cada parametro segun su tipo
      printf( "%d\n", n );
   } else {
      char *s = va_arg( argptr, char* );
      printf( "%s\n", s);
   }
}
Hope it helps.
__________________
Alicia: Sólo quiero saber que camino debo tomar.
Gato risón: Pues... depende mucho de donde quieras ir.

Mi página web
  #6 (permalink)  
Antiguo 19/10/2009, 14:49
Avatar de Claw  
Fecha de Ingreso: abril-2009
Mensajes: 299
Antigüedad: 15 años
Puntos: 9
Respuesta: Funcion con numero indefinido de parametros

Ah vale, no había entendido justamente lo de los tres puntos (supuse lo que tú apuntas, pero no creía que fuera así).

Gracias r0d
  #7 (permalink)  
Antiguo 19/10/2009, 15:00
 
Fecha de Ingreso: abril-2008
Mensajes: 141
Antigüedad: 16 años
Puntos: 0
Respuesta: Funcion con numero indefinido de parametros

He estado mirando esa funcion y veo que hay que indicarle de alguna forma el tipo de dato de la variable de la lista que esta leyendo... Un poco feo porque yo al printf, en los parametros opcionales le puedo pasar tanto un entero como un caracter sin especificarselo.

Si a alguien se le ocurre una forma para hacer una funcion con estas 2 funciones se lo agradeceria :)

Código:
char cad[256];
sprintf (cad, "Hola: numero %d, caracter %c", 5, 'h');
write (1, cad, strlen (cad));
La funcion debe poder aceptar un numero de parametros indefinidos para poder meterselos a la funcion sprintf...

No es un tema en el que me vaya la vida pero me simplificaria mucho el codigo.

Última edición por GagleKas; 20/10/2009 a las 05:01
  #8 (permalink)  
Antiguo 20/10/2009, 07:44
Avatar de Claw  
Fecha de Ingreso: abril-2009
Mensajes: 299
Antigüedad: 15 años
Puntos: 9
Respuesta: Funcion con numero indefinido de parametros

Como ya te dije, podrías usar una lista. Es una lista de structs, donde éstos tienen dos campos: dato y tipo del dato.

Le pasa a la función que quieras hacer esa lista y su tamaño. Salu2!
  #9 (permalink)  
Antiguo 21/10/2009, 13:10
 
Fecha de Ingreso: abril-2008
Mensajes: 141
Antigüedad: 16 años
Puntos: 0
Respuesta: Funcion con numero indefinido de parametros

Gracias, pero no me sirve porque en lugar de simplificarme el trabajo me lo complica mas. Tener que hacer una estructura y todo ese rollo solo para imprimir por pantalla no lo considero eficiente.
  #10 (permalink)  
Antiguo 21/10/2009, 13:15
Avatar de moscoquera  
Fecha de Ingreso: julio-2009
Mensajes: 51
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Funcion con numero indefinido de parametros

lo unico que puedes hacer es crear una lista, y guardar todo en ella.
  #11 (permalink)  
Antiguo 21/10/2009, 14:54
Avatar de Claw  
Fecha de Ingreso: abril-2009
Mensajes: 299
Antigüedad: 15 años
Puntos: 9
Respuesta: Funcion con numero indefinido de parametros

¿No es eficiente? Te simplifica bastante el trabajo, ya que con pasarle la lista (que contiene lo que vas a imprimir y su tipo) y el tamaño de la misma, dentro haces un bucle para recorrer la lista entera y listo.

Pero bueno, espera a alguna solución más si esa no te convence. Salu2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:28.