VA_START |
Début d'argument |
---|---|
Langage C++ | cstdarg (stdarg.h) |
Syntaxe
void va_start(va_list ap); |
void va_start(va_list ap, last); |
Paramètres
Nom | Description |
---|---|
ap | Ce paramètre permet d'indiquer le pointeur d'argument |
last | Ce paramètre permet d'indiquer le dernier paramètre |
Description
Cette fonction permet de fixer le pointeur d'argument au tout début.
Remarques
- Les fonctions va_arg(), va_start() et va_end() fonctionnent ensemble pour permettre à un nombre variable d'arguments d'être transmis à une fonction. L'exemple le plus courant d'une fonction prenant un nombre variable de paramètres est printf(). Le type va_list est défini par «cstdarg».
- La procédure générale de création d'une fonction pouvant accepter un nombre variable d'arguments est la suivante. La fonction doit avoir au moins un paramètre connu, mais peut en avoir plus avant la liste des paramètres variables. Le paramètre connu le plus à droite est appelé last. Le nom de last est utilisé comme deuxième paramètre dans un appel à va_start(). Avant d'accéder à l'un des paramètres de longueur variable, le pointeur d'argument ap doit être initialisé via un appel à la fonction va_start(). Après cela, les paramètres sont retournés via des appels à va_arg(), avec type étant le type du paramètre suivant. Enfin, une fois que tous les paramètres ont été lus et avant de revenir de la fonction, un appel à va_end() doit être effectué pour s'assurer que la pile est correctement restaurée. Si la fonction va_end() n'est pas appelé, un plantage du programme est très probable.
- Définition et rôle : La fonction va_start est utilisée pour initialiser un objet de type va_list étant utilisé pour accéder à une liste de paramètres variables dans une fonction. Cela permet de traiter un nombre variable d'arguments passés à une fonction. Son rôle principal est de préparer l'accès à ces paramètres en plaçant le pointeur sur le premier argument de la liste, ce qui facilite l'itération à travers les paramètres.
- Importance de son utilisation : L'utilisation de va_start est essentielle avant d'utiliser va_arg pour accéder aux paramètres. Sans cette initialisation, l'accès aux arguments serait indéfini et pourrait entraîner des comportements inattendus ou des plantages du programme. En négligeant va_start, le programmeur risque de lire des valeurs indéfinies, ce qui peut causer des erreurs difficiles à diagnostiquer.
- Placement dans le code : va_start doit être appelé au début de la fonction utilisant des paramètres variables, généralement juste après la déclaration de la variable va_list. Cela garantit que l'itération à travers les arguments commence correctement dès le premier appel à va_arg.
- Interdépendance avec va_end : Il est important de noter que chaque appel à va_start doit être associé à un appel à va_end à la fin de l'utilisation des paramètres variables. Cela garantit que toutes les ressources allouées pour gérer ces arguments sont correctement libérées. Cette interdépendance fait partie intégrante de la gestion de la mémoire et des ressources en C++.
- Portabilité et compatibilité : va_start est une fonctionnalité standard en C et C++, mais son comportement peut légèrement varier en fonction de la plateforme ou du compilateur. Cela souligne l'importance de tester le code sur différentes configurations. Les développeurs doivent être conscients de ces variations et s'assurer que le code est testé de manière adéquate dans les environnements cibles.
- Alternatives modernes : Avec l'introduction des gabarits variadiques dans C++11, l'utilisation de va_start et des macros associées devient moins fréquente. Ces nouvelles fonctionnalités permettent de gérer des arguments variables de manière plus sûre et plus claire, sans nécessiter de manipulations de pointeurs. Cela améliore la lisibilité et la maintenance du code, réduisant le risque d'erreurs liées à la gestion des paramètres.
- Usage pratique : Un exemple classique d'utilisation de va_start est dans la définition d'une fonction de journalisation ou de formatage, où l'on souhaite accepter un nombre variable de paramètres pour générer des messages formatés. En utilisant va_start, le programmeur peut facilement parcourir tous les paramètres passés à la fonction et appliquer la logique appropriée, que ce soit pour la journalisation ou le traitement des données.
Voir également
Langage de programmation - C++ - Référence procédures et fonctions - vprintf
Langage de programmation - C++ - Référence procédures et fonctions - vsprintf
Langage de programmation - C - Référence procédures et fonctions - va_start
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 735.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 289.
Dernière mise à jour : Lundi, le 3 août 2015