| 12
 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