Passieren eine variable Anzahl von Argumenten einer Funktion aliased
-
18-09-2019 - |
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.
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: