Passer un nombre variable d'arguments à une fonction crénelage
-
18-09-2019 - |
Question
Prenez une fonction printf qui accepte un nombre variable d'arguments que je voudrais faire est de passer ce nombre variable de fonctions à une sous-fonction sans changer leur ordre. Un exemple de ceci serait aliasing la fonction printf à une fonction appelée console ...
#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 je l'ai fait par exemple console("Hello %s", sName)
, je voudrais que le nom soit transmis à la fonction printf aussi, mais il doit être en mesure de continuer à accepter un certain nombre varable d'arguments comme le printf fait déjà.
La solution
Voici ce que vous voulez:
#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);
}
Autres conseils
Il y aura un autre problème (noté par gf) - vous devriez probablement concaténer la chaîne dans printf
et le paramètre _sFormat
- Je doute que printf
est récursive - d'où les déclarations de format dans le premier paramètre lire l'habitude!
D'où peut-être une telle solution serait plus agréable:
#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);
}
Types / fonctions utilisées: