VA_START |
Début d'argument |
---|---|
Langage C | stdarg.h |
Syntaxe
void va_start(va_list ptrargument) |
Paramètres
Nom | Description |
---|---|
ptrargument | Ce paramètre permet d'indiquer le pointeur d'argument |
Description
Cette fonction permet de fixer le pointeur d'argument au tout début.
Algorithme
MODULE VA_START(ap, dernier_argument_nom) * Initialiser ap pour qu'il pointe sur le premier argument variable ap ← adresse_du_dernier_argument_nom + taille_de(dernier_argument_nom) |
Remarques
- Définition et utilité : La fonction va_start est définie dans la bibliothèque <stdarg.h>. Elle est utilisée pour initialiser un objet va_list afin de parcourir une liste de paramètres variables dans une fonction. Elle prépare l'objet va_list à recevoir les arguments passés à la fonction, permettant ainsi leur manipulation dynamique avec va_arg.
- Prototypage et usage : Le prototype de va_start est le suivant : void va_start(va_list ap, last);, où ap est un objet de type va_list servant à accéder aux paramètres, et last est le dernier paramètre fixe de la fonction (celui avant le début des paramètres variables). Il est nécessaire de connaître ce dernier paramètre pour que la fonction puisse correctement identifier la fin de la liste de paramètres.
- Initialisation nécessaire avant va_arg : Avant de pouvoir utiliser va_arg pour accéder aux paramètres, va_start doit être appelée pour initialiser l'objet va_list. Sans cette initialisation, il serait impossible de parcourir correctement les arguments et cela entraînerait des comportements indéfinis dans le programme.
- Relation avec les paramètres fixes : Le paramètre last passé à va_start est essentiel pour déterminer où commencent les arguments variables dans la fonction. En l'absence d'un argument fixe, il serait difficile pour le compilateur de déterminer où commencent ces arguments variables, ce qui rend last indispensable pour l'initialisation.
- Portabilité et architecture : La gestion des paramètres variables par va_start peut varier selon l'architecture du système (par exemple, les plateformes 32 bits et 64 bits). Sur certaines plateformes, les paramètres peuvent être passés via des registres ou sur la pile, et va_start doit s'assurer que l'objet va_list est configuré correctement pour chaque méthode d'appel spécifique.
- Liaison avec la fonction va_end : Chaque appel à va_start doit être suivi d'un appel correspondant à va_end à la fin de la fonction manipulant les paramètres variables. Cela garantit que les ressources associées à la gestion de la liste d'arguments sont correctement libérées et que la fonction ne souffre pas de fuites de mémoire ou de ressources.
- Sécurité et erreurs potentielles : L'oubli d'initialiser l'objet va_list avec va_start avant d'utiliser va_arg peut entraîner des erreurs difficiles à diagnostiquer, car la manipulation des arguments sera incorrecte. Il est donc crucial de toujours suivre l'ordre approprié des macros pour garantir la sécurité du programme.
- Usage dans des fonctions avec des paramètres variables : va_start est principalement utilisée dans des fonctions comme printf ou d'autres fonctions à nombre d'arguments variable. Ces fonctions sont très utiles pour des cas où le nombre d'arguments n'est pas connu à l'avance, et va_start permet de gérer cette flexibilité de manière sécurisée et efficace.
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 : Mardi, le 28 juillet 2015