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à.

Était-ce utile?

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:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top