Supongamos que tengo una función que toma argumentos variados (...
) o un va_list
pasado desde otra función. La lógica principal está en esta función en sí (llamémoslo f1
), pero quiero que pase el va_list
a otra función (llamémoslo f2
) que determinará el siguiente tipo de argumento, obténgalo usando va_arg
, convierta y convierta correctamente guárdelo para que lo use la persona que llama.Pase va_list o puntero a va_list?
Es suficiente pasar una va_list a f2
, o es necesario pasar un puntero a va_list. A menos que se requiera va_list para ser un tipo de matriz o almacenar sus datos de posición en la ubicación a la que apunta el objeto va_list
(en lugar de en el objeto mismo), no puedo ver cómo el paso por valor podría permitir la función de llamada (f1
) para 'ver' los cambios de la función llamada realizada por va_arg
.
¿Alguien puede arrojar luz sobre esto? Me interesa lo que exige el estándar, no lo que permite una implementación particular.
De acuerdo con su última edición: un puntero es el camino a seguir (ya que el OP quiere que los cambios en 'va_list' sean definitivamente visibles en la función de llamada). – caf
@caf: no creo que debas haber editado mi referencia a 'vfprintf()' porque parece que otros están cometiendo el mismo error que yo y sugiriendo que el que pregunta mira los prototipos existentes (lo que en realidad no es cierto) responde su pregunta). – JeremyP
Yo diría que dejo un comentario y/o los voto abajo entonces - parece mejor que la respuesta correcta no se ofusque con la suposición incorrecta anterior ... – caf