1) Pourquoi les fonctions vprintf prennent-elles en paramètre un argument de type va_list au lieu de va_list * ?

1bis) Est-ce que ça aurait pu marcher aussi avec un argument de type va_list * ? (voir ci-dessous)

2) Quand on travaille dans un environnement où on ne peut pas utiliser d'allocation dynamique est-ce qu'il est dangereux d'utiliser ces fonctions/macros (va_start etc...) ? (est-ce que par exemple elles vont faire des malloc() ?)

Merci.


* Par exemple dans le K&R, il y a un exemple du genre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
void erreur(const char *format, ...)
{
    va_list args;
 
    va_start(args, format);
 
    vprintf(format, args);
 
    va_end(args);
}
s'aurait pu être :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
void erreur(const char *format, ...)
{
    va_list args;
 
    va_start(args, format);
 
    vprintf(format, &args);
 
    va_end(args);
}
si vprintf() prenait un pointeur non ?