Programmation en C: Avant liste d'arguments variable
Je suis en train d'écrire une fonction qui accepte un nombre variable de paramètres comme printf, n'quelques trucs, puis passe à la liste des variables à printf. Je ne suis pas sûr de la façon de le faire, car il me semble qu'il aurait à les pousser sur la pile.
Quelque chose comme ceci
#include <stdio.h>
#include <stdarg.h>
void forward_args( const char *format , ... ){
va_list arglist;
printf( format, arglist );
}
int main (int argc, char const *argv[]){
forward_args( "%s %s\n" , "hello" , "world" ); return 0;
}
Des idées?
- Peut-être que vous et Jean sont dans la même classe? stackoverflow.com/questions/1714550/...
- double possible de Transférer un appel d'un variadic fonction en C
Vous devez vous connecter pour publier un commentaire.
Ne pas transmettre les résultats à
printf
. les passer àvprintf
.vprintf
spécifiquement existe pour gérer les passant dansva_list
arguments. Linux homme page:Remarquez comment ces derniers prennent explicitement
va_list
arguments tels que ceux que vous déclarez à l'intérieur d'une fonction prenant...
dans la liste des paramètres. Si votre fonction est déclarée comme ceci:va_start()
etva_end()
aussi.va_start(arglist, format)
Je suis sûr que vous êtes à la recherche pour
va_start()
/vprintf()
/vsnprintf()
/va_end()
, il n'y a pas besoin de mettre en œuvre vous-même.Vous serez de passage le long de la arglist de la valeur à une fonction conçue pour consommer. Voir la stdarg et vprintf la documentation pour plus d'informations.
Je ne suis pas (du haut de ma tête) familier avec la façon de le mettre en œuvre. Je suggère de regarder à la mise en œuvre de fonctions comme printf. Plusieurs open source, il existe des implémentations. la glibc, uclibc (pas sûr de ce que bsd et opensolaris appeler/utilisation de la libc).