Retourner au contenu associé (entrée de forum : fonction à nombre variable de paramètre)
Posté par panda panda le 23 décembre 2005 à 11:53. En réponse au message fonction à nombre variable de paramètre. Évalué à 1.
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル
# il suffit de faire une fonction qui accepte une va_list
Posté par panda panda . En réponse au message fonction à nombre variable de paramètre. Évalué à 1.
c'est utilise tres frequement, notamment pour appeller vfprintf.
si je veux faire une fonction qui log au moyen d'une structure log je peux par exemple ecrire
struct loginfo {
const char *channel;
FILE *fd;
};
void
log_log(struct loginfo *li, const char *fmt, ...)
{
va_list ap;
fprintf(li->fd, "%s: ", channel);
va_start(ap, fmt);
vfprintf(li->fd, fmt, ap);
va_end(ap);
fprintf(li->fd, "\n");
}
int
main(int ac, char **av)
{
struct loginfo li;
memset(&li, 0, sizeof (struct loginfo));
li.fd = stdout;
li.channel = 'monprog';
log_log(&li, "ca marche tout comme printf, %s", "c'est vraiment trop bien");
return 0;
}
en resume y aura pas trop de soucis pour transposer de ton cote:
int
moyenne(int nbr, ...)
{
int sum;
va_list ap;
va_start(ap,nbr);
sum = somme(nbr, ap);
va_end(ap);
return sum / nbr;
}
int
somme(int nbr, va_list args)
{
int sum;
for (sum = 0; nbr--;)
sum += va_arg(args, int);
return sum;
}