Printf maison: fonction avec paramètres illimités

Contenu du snippet

C'est une fonction qui gère un nombre illimité de paramètres, vous pouvez lui en transmettre 1,2,927... et il les affiches toutes.

Source / Exemple :


#include <iostream.h> //pour les cout
#include <stdarg.h> //pour les macros/type
#include <string.h> //pour strcat()

// Prototype de la fonction, num est le nombre de paramètres
// ... représente un nombre indéfini de paramètres
void printfmaison(int num,  ...);

void main()
{
	//qque chaines
	char lala[10] = "Lala"; 
	char str1[20] = "Copie de ";
	char str2[10] = "Chaines";

	//on call la fonction avec 5 paramètres supplémentaires:
	// 3 chaines constantes, 1 chaines variable, 1 retour de fonction
	printfmaison(5, "Salut", "Bonjour", "1982", lala, strcat(str1, str2));
}

void printfmaison (int num,  ...)
{

	//un simple typedef pour char*, gère les arguments supplémentaires
	va_list arguments; 

	//va_start: paramètre1: le pointeur d'argument
	// paramètre2: le dernier paramètre obligatoire (formel)
	// Cette macro indique que arguments sera le pointeur vers les arguments supplémentaires
	va_start(arguments, num); 

	//cette boucle fouille pour trouver tous les paramètres supplémentaires
	// num est le nombre de paramètres supplémentaires envoyé par la fonction
	for (int i = 0; i < num; i++)
		//va_arg: paramètre1: le pointeur d'argument
		// paramètre2: le type vers lequel doit pointer notre pointeur d'argument
		cout << va_arg(arguments,char*) << "\n";

	//termine le pointage (non essentiel dans ce contexte car la fonction termine)
	va_end(arguments);

}

Conclusion :


Voila, maintenant c'est à vous d'en créer des variantes, du genre "Afficher en nombre illimité de MessageBox" ou "Ajouter un nombre illimité d'éléments dans une ListBox"

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.