C/Visual C - funciones con numero de parametros desconocidos

 
Vista:

funciones con numero de parametros desconocidos

Publicado por Oliver Ramirez (339 intervenciones) el 17/05/2002 19:11:01
si quiero hacer una funcion que le pueda decir:
sume(5,6,3,2,1) //me devuelve la suma total
sume(5,3,1) //me devuelve la suma tambien
sume(3,2,1,4,8,6,8,7,8,9) //tambien devuelve la suma

y no tenga que sobrecargar todas estas funciones con numeros distintos de parametros.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:funciones con numero de parametros desconocidos

Publicado por Víctor Carreño (13 intervenciones) el 17/05/2002 23:02:40
Oliver:
El código que coloco debajo lo compilé en Visual C++, pero creo que unas de las siguiente funciones:va_start y va_arg, tiene diferente prototipo en otro compilador.

Esta es la función que pides:

int Sume ( int nNumero, ... )
{
va_list vlIDM;
int nSumando = nNumero,
nSumatoria = 0;

va_start ( vlIDM, nNumero ); //
while ( nSumando != -1 )
{
nSumatoria += nSumando;
nSumando = va_arg ( vlIDM, int );
}
va_end ( vlIDM );

return nSumatoria;
}

Pero, debes tener en cuenta los siguiente:

Cuando invocas a una función que tiene número de parámetros variable, debes poder saber cuando estos parámetros van a terminar, en este caso, la función espera que el último parámetro sea -1 y asi tiene que ser, sino el resultado es inpredecibles.

Esto lo puedes deducir de la forma como trabaja la función printf, la cual tiene una cadena de formato ("%d %f %s, etc",) que analiza y puede saber cuentos párametros y de que tipo son.

Así puedes invocar a tu función:

int nSum;

nSum = Sume (1, 2, 3, 4, 5, -1); // Suma 1+2+3+4+5
nSum = Sume (1, 2, -1); // Suma 1+2
nSum = Sume (1, 2, 3, -1);// Suma 1+2+3


Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar