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.

¿Fue útil?

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:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top