1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| #include <stdarg.h>
#include <stdio.h>
/* La façon dont s'est fait normalement:
Une fonction avec une va_list en paramètre,
Et un wrapper avec des points. */
static int vTest(int dummy, va_list args)
{
char const *str;
while((str = va_arg(args, char const*)) != NULL)
puts(str);
return dummy*2;
}
static int Test(int dummy, ...)
{
int ret;
va_list args;
va_start(args, dummy);
ret = vTest(dummy, args);
va_end(args);
return ret;
}
void TestVaList(void)
{
/* La façon dont on utilise normalement la fonction: */
Test(42, "Truc", "coucou", NULL);
/* Test avec création dynamique d'une va_list. */
{
char const * param[8];
va_list vl;
param[0] = NULL; /*Cette partie ne sera pas passée en paramètre.*/
param[1] = "Blabla";
param[2] = "Test";
param[3] = NULL;
va_start(vl, param[0]);
vTest(18, vl);
va_end(vl);
}
} |
Partager