Funciones con nº variable de argumentos - stdarg.h

Iniciado por SSantiago90, 3 Mayo 2013, 22:27 PM

0 Miembros y 1 Visitante están viendo este tema.

SSantiago90

Buenas

Estoy aprendiendo C++ de forma particular, leyendo foros por aqui y por alla, y principalmente guiandome por el libro "C++ con Clase".
En fin, venia bastante bien hasta que me topé con esto.

No entendí para nada el tema de la libreria stdarg, se que se usa para manipular las funciones cuando no definimos el numero de argumentos que se pasan como parametros, pero nada mas. No comprendo su funcionamiento y no he encontrado una buena guia o ayuda en internet, alguien me da una mano?


Citarfichero de cabecera "stdarg.h", estas macros permiten manejar "fácilmente" las listas de argumentos desconocidos.

Tipos:

En el fichero de cabecera "stdarg.h" de define un tipo: va_list.
Será necesario declarar una variable de este tipo para tener acceso a la lista de
parámetros.

Macros:

También se definen tres macros: va_start, va_arg y va_end.

void va_start(va_list ap, ultimo);
Ajusta el valor de "ap" para que apunte al primer parámetro de la lista. <ultimo> es el identificador del último parámetro fijo antes de comenzar la lista.

tipo va_arg(va_list ap, tipo);
Devuelve el siguiente valor de la lista de parámetros, "ap" debe ser la misma variable que se actualizó previamente con "va_start", "tipo" es el tipo del parámetro que se tomará de la lista.

void va_end(va_list va);
Permite a la función retornar normalmente, restaurando el estado de la pila, esto es necesario porque algunas de las macros anteriores pueden modificarla, haciendo que el programa termine anormalmente.

Luego sigue con unos ejemplos pero no me ayudaron mucho.
Necesitaria una pequeña simplificacion de esto :)

Por otro lado, me pueden dar un ejemplo concreto de una situacion en la que sea necesario/util utilizar funciones con cantidad de argumentos variable?

Gracias, Saludos!


SSantiago90

Es exactamente el material que estoy leyendo, me gustaria encontrar una explicacion diferente, gracias

x64core

Cita de: SSantiago90 en  3 Mayo 2013, 22:44 PM
Es exactamente el material que estoy leyendo, me gustaria encontrar una explicacion diferente, gracias

Creo que la explicación ahí es clara. un ejemplo como podrias ver es la funcion Printf, utiliza un numero variable de argumentos
debido que el usuario puede agregar valores tanto como el quiera ( Longitud depende de la implementación, algunas aceptan como longitud maxima de la cadena de formato a 1024, etc )
Dependendiendo de la situacion reemplazo de un puntero a array de punteros.

Yo supongo que el entendimiento de las macros/tipo(s) de Variables que se emplean ha sido comprendido.

SSantiago90

Me parece que aqui esta mejor explicado, y hay otros ejemplos, por si a alguien le sirve

http://manpages.ubuntu.com/manpages/precise/es/man3/stdarg.3.html

saludos

85

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/