Funciones con argumentos variables.
Publicado por Gilbrán (1 intervención) el 01/08/2005 17:29:23
Saludos.
Tengo el siguiente código en C:
#include <conio.h>
#include <stdio.h>
#include <stdarg.h>
/* Calcula la sumatoria de un n£mero indefinido de argumentos enteros. */
int sum(int v, ...)
{
int arg=0, total=v;
va_list argptr;
va_start(argptr, v);
while ((arg=va_arg(argptr, int))!=0)
total+=arg;
va_end(argptr);
return total;
}
/* PROGRAMA PRINCIPAL*/
void main()
{
clrscr();
printf("\nSumatoria: [%ld]", sum(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15));
}
Hasta aquí podrán ver lo que estoy haciendo para leer una lista de argumentos variables de una función determinada, no obstante, mi problema radica en una manera confiable de leer toda la lista de argumentos hasta el final, es decir, encontrar un tope confiable del final de la lista de argumentos, para incluir aquellos argumentos que se envíen a la función como cero o valores aparentemente no válidos; pero lo más que he logrado es leer el apuntador argptr hasta que sea NULL y mientras leo la lista recupera cantidades extrañas de la memoria.
O bien, si conocen otra manera de recuperar de manera confiable una lista argumentos variables de una función dada aunque los argumentos que se envíen sean cero o cantidades que parecieran extrañas. Por ejemplo, sum(-34590, -27620, 0, 0, -12500, 75000);
Por su atención, muchas gracias compañeros.
Gilbran Romero Caballero.
Tengo el siguiente código en C:
#include <conio.h>
#include <stdio.h>
#include <stdarg.h>
/* Calcula la sumatoria de un n£mero indefinido de argumentos enteros. */
int sum(int v, ...)
{
int arg=0, total=v;
va_list argptr;
va_start(argptr, v);
while ((arg=va_arg(argptr, int))!=0)
total+=arg;
va_end(argptr);
return total;
}
/* PROGRAMA PRINCIPAL*/
void main()
{
clrscr();
printf("\nSumatoria: [%ld]", sum(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15));
}
Hasta aquí podrán ver lo que estoy haciendo para leer una lista de argumentos variables de una función determinada, no obstante, mi problema radica en una manera confiable de leer toda la lista de argumentos hasta el final, es decir, encontrar un tope confiable del final de la lista de argumentos, para incluir aquellos argumentos que se envíen a la función como cero o valores aparentemente no válidos; pero lo más que he logrado es leer el apuntador argptr hasta que sea NULL y mientras leo la lista recupera cantidades extrañas de la memoria.
O bien, si conocen otra manera de recuperar de manera confiable una lista argumentos variables de una función dada aunque los argumentos que se envíen sean cero o cantidades que parecieran extrañas. Por ejemplo, sum(-34590, -27620, 0, 0, -12500, 75000);
Por su atención, muchas gracias compañeros.
Gilbran Romero Caballero.
Valora esta pregunta


0