La plupart des fonctions acceptent un nombre fixe d' arguments. Certaines applications nécessitent toutefois des fonctions d'accepter des paramètres variables . Un exemple bien connu est la fonction d'impression de C. Pour de tels cas , C + + offre une solution puissante qui permet au compilateur de déchiffrer les arguments au moment de l'exécution. Lire la suite pour un tutoriel qui montre comment implémenter ces fonctions. Choses que vous devez
intermédiaire C + +
compilateur C + + avec l'IDE , tels que Microsoft Visual C + +
Afficher plus Instructions
1
Ajouter le fichier de bibliothèque dans stdarg.h votre programme. C'est là que vous définissez les macros. Sur la première ligne du fichier , insérez # include .
2
utiliser les macros va_arg , va_start et v_end qui collaborent avec le va_type dans stdarg.h .
3
Établir une variable de type va_list à fonctionner comme un marqueur de la liste.
4
Accédez aux paramètres individuels à l'aide de la macro va_arg . Trouvez une façon de dire à la macro va_arg ce type d' argument que vous voulez pour récupérer de fournir le nombre exact d'octets de la pile.
5
Jetez le résultat de l'étape 4 pour le type que vous voulez être.
6
appeler la macro va_end à la fin du traitement des paramètres variables .
7
Regardez l' exemple ci-dessous qui montre les étapes 2 à 6. Fonction accepte myprintf une chaîne de format qui spécifie le type et la position de chaque argument. Suite à la chaîne de format est la liste des arguments. La fonction affiche les arguments. Pour simplifier, on ne peut traiter que int, float et char: Photos //déclaration
vide myprintf (char * Le format , ...);
//défintion
vide myprintf (format char * . ..) {
va_list vl ;
int i;
va_start ( vl, args) ;
for (i = 0; args [ i] = '\\ 0' ; ! + + i) {
union any_t {
int i;
float f ;
char c ; }
tout ;
if ( args [ i ] == ' i ') {
any.i = va_arg ( vl, int) ;
printf ("% i \\ n", any.i ) ; } else
if ( args [ i ] == 'f' ) {
any.f = va_arg ( vl , float) ;
printf ( "% f \\ n", any.f ) ; } else
if ( args [ i ] == 'c') {
any.c = va_arg ( vl, char) ;
printf ("% c \\ n", any.c ) ;
} else {
jeter UneException ;
}
va_end ( vl ) ; }