Frage

Nehmen Sie eine Funktion wie printf, die eine variable Anzahl von Argumenten akzeptiert, was Ich mag würde ich diese variable Anzahl von Funktionen zu einer Unterfunktion passieren tun, ohne ihre Reihenfolge zu ändern. Ein Beispiel hierfür wäre die printf Funktion auf eine Funktion namens Konsole sein Aliasing ...

#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);
}

Wenn ich zum Beispiel console("Hello %s", sName) täte, würde ich den Namen möchte auch auf die printf-Funktion übergeben werden, aber es muss in der Lage sein, weiterhin ein varable Anzahl von Argumenten wie der printf akzeptieren bereits der Fall ist.

War es hilfreich?

Lösung

Hier ist, was Sie wollen:

#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);
}

Andere Tipps

Es wird ein anderes Problem (von gf angegeben) - Sie sollten wahrscheinlich die Zeichenfolge in printf verketten und die _sFormat Parameter - ich bezweifle, dass printf ist rekursiv - daher die Formatanweisungen im ersten Parameter wird nicht gelesen werden!

Daher vielleicht eine solche Lösung wäre schöner:

#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);
}

Typen / Funktionen:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top