Pasar un número variable de argumentos a una función de alias
-
18-09-2019 - |
Pregunta
Tome una función como printf que acepta un número variable de argumentos lo que me gustaría hacer es pasar estos número variable de funciones a una función secundaria sin cambiar su orden. Un ejemplo de esto sería un alias a la función printf a una consola función llamada ...
#include <stdio.h>
void console(const char *_sFormat, ...);
int main () {
console("Hello World!");
return 0;
}
void console(const char *_sFormat, ...) {
printf("[APP] %s\n", _sFormat);
}
Si lo hiciera, por ejemplo console("Hello %s", sName)
, me gustaría que el nombre que se pasa a la función printf también, pero tiene que ser capaz de seguir aceptando una serie de argumentos varable como el printf ya hace.
Solución
Esto es lo que quiere:
#include <stdio.h>
#include <stdarg.h>
void console(const char *_sFormat, ...);
int main () {
console("Hello World!");
return 0;
}
void console(const char *_sFormat, ...) {
va_list ap;
va_start(ap, _sFormat);
printf("[APP] ");
vprintf(_sFormat, ap);
printf("\n");
va_end(ap);
}
Otros consejos
No habrá otro problema (señalado por gf) - probablemente debe concatenar la cadena en printf
y el parámetro _sFormat
- Dudo que printf
es recursivo - por lo tanto las instrucciones de formato en el primer parámetro suele ser leídos!
Por lo tanto, tal vez una solución de este tipo sería más agradable:
#include <stdarg.h>
void console(const char *_sFormat, ...)
{
char buffer[256];
va_list args;
va_start (args, _sFormat);
vsprintf (buffer,_sFormat, args);
va_end (args);
printf("[APP] %s\n", buffer);
}
Tipos / funciones utilizadas: